You're looking at Less Wrong's discussion board. This includes all posts, including those that haven't been promoted to the front page yet. For more information, see About Less Wrong.

John_Maxwell_IV comments on Open thread, Jan. 12 - Jan. 18, 2015 - Less Wrong Discussion

6 Post author: Gondolinian 12 January 2015 12:39AM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (155)

You are viewing a single comment's thread. Show more comments above.

Comment author: Username 14 January 2015 04:14:12AM *  6 points [-]

(request for guidance from software engineers)

I'm a recent grad who's spent the last six years formally studying mathematics and informally learning programming. I have experience writing code for school projects and I did a brief but very successful math-related internship that involved coding. I was a high-performing student in mathematics and I always thought I was good at coding too, especially back in high school when I did programming contests and impressive-for-my-age personal projects.

A couple months ago I decided to look for a full-time programming job and got hired fairly soon, but since then it's been a disaster. I'm at a fast-moving startup where I need to learn a whole constellation of codebase components, languages, technologies, and third-party libraries/frameworks but I'm given no dedicated time to do so. I was immediately assigned a list of bugs to fix and without context and understanding of the relevant background knowledge I frantically debug/google/ask for help until somehow I discover the subtle cause of the bug. Three times already I've received performance pressure, and things aren't necessarily looking up. Other new hires from various backgrounds seem to be doing just fine. All this despite my being a good coder and a smart person even by LW standards. I did well in the job interview.

When I was studying and working in academia, I found that the best way to be productive at something (say, graph theory research) is to gradually transition from learning background to producing output. Thoroughly learning background in an area is an investment with great returns since it gives me context and a "top-down" view that allows me to quickly answer questions, place new knowledge into an already dense semantic web, and easily gauge the difficulty of a task. I could attempt to go into more details but the core is: Based on my experience, "hitting the ground running" by prioritizing quick output and only learning background knowledge as necessary per task is inefficient and I'm bad at it.

At the moment my only strong technology skills are the understanding of the syntax and semantics of a couple of programming languages.

Am I at the wrong company? Am I in the wrong profession -- should I go back to academia, spend four years getting a PhD, and work in more mathy positions? Thanks!

Comment author: John_Maxwell_IV 17 January 2015 01:28:18AM *  3 points [-]

One framing that might be useful: Part of being a professional software engineer is learning new things constantly, whether it's new languages, new frameworks, new codebases, etc. But this itself is a skill that can be learned and practiced. In addition to having the attitude of relentless resourcefulness, there are many small tricks that can be picked up: for example, grepping for a bit of text from the UI to quickly find the code that defines it, using Google's site: operator to make it easier to do targeted documentation searches, using your language's debugger to solve bugs, having an editor with lots of plugins installed that make you more efficient, etc. This sentence: "I was immediately assigned a list of bugs to fix and without context and understanding of the relevant background knowledge I frantically debug/google/ask for help until somehow I discover the subtle cause of the bug" sounds like a pretty good description of what I found it was like to work as a software engineer at a startup, minus the word "frantic". I spent a lot of time learning just enough about the code I was working with to solve the problem I needed to, searching on google for just enough documentation to accomplish what I needed to accomplish, etc. Even the best software developers are doing keyword searches on Google and their codebase constantly as part of their development flow; if you find yourself doing this you should not consider it indicative of a problem.

Based on what you describe as your programming background, it sounds like you don't have much experience with this modality of software development. Probably lots of other recent hires have experience as interns or teaching themselves stuff for independent projects, which helped them learn the skill of just-in-time knowledge acquisition. I might try working at a less demanding company just so you could feel less stressed out and give yourself the opportunity to gradually ramp up to this development style. If you work at a bigger, slower-moving company that nevertheless is using fairly up-to-date technologies and you spend 15 minutes every morning working to improve your tools & efficiency, my guess is you'll be in a much better place after a year or so.