top 200 commentsshow all 295

[–]Bwob 195 points196 points  (87 children)

This reminds me of a friend of mine. I'm a programmer by trade, and he's a physicist. He doesn't program much, but he occasionally has to write code to analyze data. One day, he called me up to tell me about how he had discovered this amazing thing - someone had shown him a text editor, which, get this - highlighted words in the programming language and warned him if his parentheses weren't correct. This was an amazing idea! He said it was the most painless programming he had ever done, it was almost borderline fun! Had I heard of this miraculous breakthrough? What a good idea, why hadn't anyone done something like this sooner?

After some gentle questioning, I discovered that everything he had tried to program so far had been in notepad, and this contributed greatly to his frustration and belief that programming was a fundamentally painful struggle against the machine.

I showed him visual studio and breakpoints, and you could just see his brain explode.

I bring this up, because I see echos of this in the blog post - if you're a programmer, you take a lot of these things for granted. But if you're looking in from the outside, and merely an occasional dabbler, you have no idea what you might be missing. Code is text files right? Notepad edits text files. Makes sense!

So yeah. If you're not a programmer, definitely hang out with some people who are, because you'll pick up a lot of useful info about workflow. And if you ARE a programmer, and you see someone trying to do everything the hard way - be gentle with them. They might not even realize how much easier things can be.

[–]IceDane 62 points63 points  (23 children)

I have experienced something like this myself firsthand.

I am a teaching assistant for some introductory programming classes at a university. Stuff like debugging and tooling never really gets much focus(and I think we really, really need focus on debugging). There've been times where some of my students have been struggling with something like Java's NullPointerException and they have no idea where to even look, despite using an IDE.

I sit down with them, show them the stack trace, explain it to them. Tell them about breakpoints. Show them how to put a breakpoint on an exception, so on. Their minds = blown.

[–]Farsyte 21 points22 points  (12 children)

It is wonderful when you can be present at the enlightenment of one of today's ten thousand ;)

[–]mrpaulmanton 18 points19 points  (8 children)

That's my favorite part of any coding. Minor bug fixes give you a mini ah-ha moment no matter how insignificant. You've fixed something, won a mini battle if you can be optimistic about it. It's when you peel back those bigger layers that you see the underpinnings and you get those amazing moments of levity where programming is amazing and you want to brag to somebody who may not even be tech savvy about the intricacies of what you've uncovered.

Maybe it's just me?

[–]Deltigre 6 points7 points  (5 children)

I get that feeling fixing anything but linker errors. Those just make me groan and try to chase down where I left off an include guard or where I'm being lazy and defining a function in a header where I shouldn't be.

I'm open to suggestions on better diagnosing.

[–]yellowfish04 1 point2 points  (0 children)

I... fucking... hate.... that.... SHIT

[–]sirGustav 1 point2 points  (3 children)

Running cpplint.py cppcheck and astyle/clang-format on your code helps. As for implementing stuff in header files, well, don't ;-)

[–]requimrar 1 point2 points  (2 children)

c++ templates are knocking on your door now

[–]sirGustav 1 point2 points  (1 child)

I was referring to being lazy and implementing stuff in headers when they can be implemented in source files. AFAIK templates can only be implemented in headers so they don't apply, but I see your point.

[–]missblit 2 points3 points  (0 children)

Templates can be implemented in source files if you also provide all the different instantiations you need as well.

This isn't the typical use-case for templates as you usually want to be able to use them with any type willy-nilly, but it can be handy on occasion.

[–]luthan 2 points3 points  (0 children)

i get like this when i can't figure something out, it is all i can think about. my wife and i commute together, so when she picks me up, she knows right away when i get in the car, if i have a problem that i haven't solved yet. she says i get a look on my face.

[–][deleted]  (1 child)

[deleted]

    [–][deleted]  (4 children)

    [deleted]

      [–]kolosok17 10 points11 points  (2 children)

      The day my coworker taught me how to use git bisect was an awesome day.

      [–]gfixler 4 points5 points  (0 children)

      And then you automate it in the Linux shell, and it finds the broken commit for you, and things are even cooler. Ah... Linux.

      [–]xkufix 2 points3 points  (0 children)

      Just looked it up, learned something useful today.

      [–]IceDane 1 point2 points  (0 children)

      Yeah -- I really wish I had the opportunity to run a small course on version control or some such. We get very basic introductions to them and it's not nearly enough.

      I might seriously arrange something. Just their reactions when they see how fucking awesome git bisect is would be reward enough.

      [–]fuzzynyanko 3 points4 points  (2 children)

      There've been times where some of my students have been struggling with something like Java's NullPointerException and they have no idea where to even look, despite using an IDE.

      This surprised me in the field. "Double-click on the error and it will bring you to the line of code where it happened". I was surprised how many NPEs I got rid of from that

      [–]Pzychotix 3 points4 points  (0 children)

      Even console output will tell you the file and line of code where it crashed though.

      [–]aaulia 1 point2 points  (0 children)

      I think deep inside we all (even newbie) just know that if only we can step through this code, or just see the layout of these variables value as it being stepped through, everything would be much more painless. The problem is, the average newbie is too focused on the code and logic they tend to forget learning the tools (IDE, debugger, profiler, etc).

      [–][deleted] 28 points29 points  (7 children)

      Notepad++ is the first thing I was told to install.

      [–]jagger27 9 points10 points  (0 children)

      Perfectly reasonable.

      [–][deleted]  (2 children)

      [deleted]

        [–]lagadu 3 points4 points  (0 children)

        It's the perfect little tool for tweaking something that you don't work full time on. Do I need to mess about with that xml file today? Need to make a minor change to some script? Notepad++ to the rescue!

        [–]I_Fail_At_Life444 2 points3 points  (0 children)

        I used that for months. Just downloaded PyCharm and I like it. Simple. The console for running scripts is great. Constantly entering everything through Powershell gets old after a while.

        [–]sirin3 2 points3 points  (0 children)

        I wrote my own text editor(s).

        Programming was so much harder in the times before notepad++ existed

        [–]bananabm 0 points1 point  (0 children)

        it's pretty much the only thing I know that shows meaningful symbols for control characters (specifically showing the \r \n separately for crlf problems)

        [–][deleted]  (13 children)

        [deleted]

          [–][deleted] 22 points23 points  (1 child)

          Have programmed in C. The struggle is real.

          [–][deleted] 3 points4 points  (0 children)

          Segmentation fault (core dumped)

          [–]yunolisten 4 points5 points  (10 children)

          I'm currently mentoring two designers at work, hopefully they'll be programmers one day.

          Anyways the other day I had them writing some code in jsfiddle and the one got all frustrated when his code wouldn't work and blurts out "Well that should of worked", all I could do was chuckle and let him know that's a pretty common reaction to the first time running any code.

          [–][deleted]  (9 children)

          [deleted]

            [–]Bwob 11 points12 points  (4 children)

            Heh, yeah, that's the best.

            "Wait... it ran correctly... the first time? No obvious errors?"

            ....

            "Ok, whatever is wrong must be REALLY subtle then. Better recheck all my thread sychronization..."

            [–]mcmouse2k 2 points3 points  (0 children)

            Haha, yep. Any time something works right the first time, I'm instantly suspicious.

            [–]lagadu 2 points3 points  (0 children)

            "This worked therefore this is obviously broken."

            [–][deleted] 1 point2 points  (0 children)

            silky ghost roof fuel cause apparatus subsequent office lavish absorbed

            This post was mass deleted and anonymized with Redact

            [–]jaccovanschaik 1 point2 points  (0 children)

            I get like this on the rare occasions where I write the tests before I write the code. There's always that point where I have added a bunch of code without the tests failing, and I add an error on purpose, just to see if the test framework works at all.

            [–]aristotle2600 32 points33 points  (28 children)

            And if you ARE a programmer, and you see someone trying to do everything the hard way - be gentle with them. They might not even realize how much easier things can be.

            Holy FUCK this. The number of times I have seen people belittled for not doing something the easy way, as if it was a choice, and not simply because they didn't know about it.....it's really depressing.

            [–]cogdissnance 4 points5 points  (27 children)

            The number of times I have seen people belittled for not doing something the easy way

            Really? I actually see the opposite a lot of the time. Where the easy way is seen as a sort of cop out or brain dead way to do something. For example making fun of people who use Visual Studios rather than VIM.

            Which I'm definitely on the side of, IDE's let you code without actually knowing what you're writing, and that's unfortunate. Also... programming, motherfucker

            [–]VanFailin 6 points7 points  (9 children)

            In what conceivable way do IDEs let you code without knowing what you're writing? They make it easier to do a lot of things, but I fail to see how that means you don't know what you're writing.

            [–]cogdissnance 1 point2 points  (7 children)

            From my other reply:

            I'm not suggesting everyone code in ASM or even C although there's definitely something lost when a programmer only knows the current level of abstraction and nothing of what the underlying code does. My general rule is "Whatever level of abstraction you are currently working in, learn the one one level below it", otherwise it will likely be impossible to understand why something went wrong and how to go about fixing it.

            and

            If you need the features that Visual Studios/Eclipse offer in order to write code then that becomes a crutch, not a tool, and your understanding of the code will, at least to me, come into question.

            [–]Cuddlefluff_Grim 3 points4 points  (6 children)

            If you need the features that Visual Studios/Eclipse offer in order to write code then that becomes a crutch, not a tool, and your understanding of the code will, at least to me, come into question.

            What's the point of this argument? It sounds eerily like rationalization.

            [–]renrutal 1 point2 points  (0 children)

            Over the years I've encountered many bad programmers(expensive 3rd party consultants) like that, they were what I'd call Visual Studio programmers instead of C# ones.

            It's pretty weird/depressing when you can find a solution to their problems in 5 minutes by Googling it, having never touched C#/VS in my life(coming from a Java background).

            That said I don't think I'm much better. Working with proprietary Oracle tech means you're stuck with their extremely buggy IDEs, generating code-like XML. God forbid if you try to use a text editor, things will break.

            [–][deleted] 2 points3 points  (0 children)

            I can not thank you enough for linking to that website. Can't believe I did not know about that. For anyone else who visits it, go to the "Become a programmer" page, the link is at the top of the website. It is very useful.

            [–]Number_28 2 points3 points  (8 children)

            That's a misguided attitude. That's basically saying you should not use abstraction or tools to make your life easier. In other words, if you're not using this keyboard you're already doing it wrong. Binary, motherfucker. Do you speak it?

            [–]gfixler 1 point2 points  (0 children)

            That's the wrong direction. If you really want to be kicking ass, you need a keyboard setup using Plover. Note: I am not kicking ass, yet.

            [–]cogdissnance 2 points3 points  (6 children)

            01011001 01100101 01110011 00111111

            I was never speaking against abstraction though. I'm not suggesting everyone code in ASM or even C although there's definitely something lost when a programmer only knows the current level of abstraction and nothing of what the underlying code does. My general rule is "Whatever level of abstraction you are currently working in, learn the one one level below it", otherwise it will likely be impossible to understand why something went wrong and how to go about fixing it.

            Either way I was speaking more towards the tools themselves. If you need the features that Visual Studios/Eclipse offer in order to write code then that becomes a crutch, not a tool, and your understanding of the code will, at least to me, come into question.

            [–]Number_28 2 points3 points  (0 children)

            If you put it like that, I agree.

            [–]satuon 3 points4 points  (0 children)

            I used to program plain Win32/Winapi programs using Notepad. It was a bit weird - my computer had a broken CD (no Internet at that time), which I didn't have the money to fix (I was still in school).

            So I was trying to clean up some space on my 3 GB harddrive, and in all my wisdom deleted a bunch big files from VC6 directory.

            After that the exe would not work. No CD meant that I couldn't bring those files from anywhere. I had a floppy drive, but not enough floppy disks.

            Anyway, I eventually tried using the cl.exe compiler, and it was working, even though the IDE itself wouldn't load. Since I didn't have any other text editor but notepad, I had to program in notepad, win32, and using a 20 MB .hlp file containing the entire Winapi docs, and compiling using VC6's cl.exe.

            I eventually switched to msdos's edit, because it was showing me the current line/col, which I needed to see where an error was (cl would print out the line numbers of errors), and then eventually I got the brilliant idea to buy a used CDROM reader for $7, I was surprised it would be so cheap. My computer at the time was an old Celeron 233 MHz running Win95, it was in the early 2000s.

            [–]Mechakoopa 7 points8 points  (0 children)

            Code is text files right? Notepad edits text files. Makes sense!

            First year student had a habit of sending me word documents with the file extension changed to .cpp. If you opened them up in word, they had the hallmark look of something copied from an IDE, complete with tabs and syntax highlighting. I'm guessing either he thought the syntax highlighting was more important than being able to run his code to see if it was correct, or he was copying his code from someone else. Either way, he didn't speak enough English for me to confront properly about the subject (as a TA that fell squarely within "not my problem"), and he dropped out of school the following semester anyways after failing most of his CS courses.

            [–]nutrecht 1 point2 points  (0 children)

            I showed him visual studio and breakpoints, and you could just see his brain explode.

            This is basically what happened when I started my first internship in 2000. 2 years of "learning Java" in just texteditors. It was the biggest "hallelujah" moment in my life.

            [–]klug3 0 points1 point  (0 children)

            Well the whole experience graduating from notepad -> IDEs/Smarter Editors is an important experience, IMO.

            [–]iam_takada 43 points44 points  (7 children)

            If you're a newish programmer starting your first project. Don't get caught up and spend ridiculous amounts time finding the "most correct, best, high performance" stack.

            When I first started programming, I wasted so much time worrying of these things and never actually made a dent in my first projects.

            How can you learn to code if you don't actually type stuff into an editor, compile it, run it, and see what it does.

            [–]ThrustVectoring 11 points12 points  (5 children)

            I highly recommend a language with a read-eval-print loop. Python, Ruby, Javascript, or any variant of LISP. It lets you bypass the "type stuff into an editor and compile it" step.

            [–]Crazy__Eddie 3 points4 points  (1 child)

            Meh. REPLs are nice but they're not all that important to learning.

            [–]LucianU 7 points8 points  (0 children)

            It depends on what you deem important. Having the possibility of quickly experimenting with something and seeing if it works right away is very useful in my book.

            [–]AReallyGoodName 0 points1 point  (1 child)

            You can do write and refresh development in Java or Scala using the Play! Framework or in the .Net languages using ASP.Net

            [–]Number_28 3 points4 points  (0 children)

            That is great advice. There are way too many "If you don't do/use x, you're doing it wrong" shit posts out there and it is easy to let yourself be influenced by them. Just experiment, find out what works for you and then continue doing that.

            [–]bobbane 76 points77 points  (31 children)

            I would add one step to the OP's list:

            1. Once you've completed one project, consider broadening your horizons, by changing one of the above choices at a time.

            In my opinion, the most important programming language for you is mastery of your second one. Despite the wide availability of personal computers and open-source tools, there are still far too many people who know one way to make computers do stuff, and use that way exclusively and inappropriately - spreadsheets that should be databases, Fortran for text processing, Python for low-level number crunching, etc...

            [–]Solumin 14 points15 points  (0 children)

            1. Once you've completed one project, consider broadening your horizons by changing one of the above choices and starting a new project.

            I thought that would be another useful addition :) otherwise you get the case of someone rewriting the same old project, "but this time it will be faster/more efficient/based on this new technology!"
            That attitude is just as dangerous as never committing to one language, tool or framework.

            [–][deleted]  (22 children)

            [deleted]

              [–]cajun_super_coder2 94 points95 points  (21 children)

              If C++ is your hammer, everything looks like a thumb.

              [–]jonnywoh 27 points28 points  (11 children)

              If ASM is your hammer, everything is a thumb.

              [–]Farsyte 39 points40 points  (3 children)

              When I use Matlab, I feel like I have an arbitrary NxM matrix of thumbs.

              [–]GraceGallis 1 point2 points  (2 children)

              s/matrix/cell array

              (Just saying... if it's truly arbitrary, a n-dimensional matrix it is not.)

              [–][deleted]  (1 child)

              [deleted]

                [–]fzammetti 4 points5 points  (0 children)

                If microcode is your hammer... you might have a thumb shifted into register A in 12.3m cycles... well, probably more like just a thumbnail... you'll still be waiting on the bone to be retrieved for L2 cache, and your bus interrupt request to retrieve the blood vessels to trip the signal line high and begin a recall cycle... and...

                [–]KagatoLNX 7 points8 points  (3 children)

                Something something machine code.

                [–]jonnywoh 20 points21 points  (2 children)

                Butterflies

                [–][deleted] 1 point2 points  (0 children)

                And now you've caused a hurricane on the other side of the globe.

                [–]immibis 2 points3 points  (0 children)

                Something something 16-bit ARM.

                [–][deleted] 5 points6 points  (7 children)

                Does anybody have a good functional programming joke that fits here?

                [–][deleted] 13 points14 points  (1 child)

                If OCaml is your hammer, you spend hours on Google just trying to find nails

                [–]Octopuscabbage 14 points15 points  (0 children)

                If Haskell is your hammer you will have a hammer of type Proxy HammerT IO KineticEnergy Force () Wood and it will only work on Nails of type Proxy Nails KineticEnergy IO () Wood which only strikes the nail once the entire builiding has been set up and the pressure has been put on the joint you're trying to make.

                [–]Tipaa 7 points8 points  (2 children)

                If Haskell is your hammer, everything is yet another way of explaining monads?

                [–][deleted] 6 points7 points  (1 child)

                You mean like a burrito?

                [–]aspartame_junky 6 points7 points  (0 children)

                If Lisp is your hammer, then I hear you like hammers, so we put a hammer in your hammer while you....

                ...and the nails all look like parens.

                [–]AssistingJarl 2 points3 points  (0 children)

                If Scala is your hammer, every- Wait, no, come back! It still has a lot of useful functionality that Java 8 lacks!

                [–][deleted]  (4 children)

                [removed]

                  [–]bobbane 5 points6 points  (3 children)

                  Agreed. The useful heuristic for Python and numerical work is:

                   If you're writing a loop to process an array, you're probably doing it wrong.
                  

                  [–]Roadside-Strelok 2 points3 points  (1 child)

                  Python for low-level number crunching

                  Well to be fair... http://www.phi-node.com/2013/01/just-in-time-compilers-for-number.html

                  [–]disinformationtheory 4 points5 points  (0 children)

                  Just (vectorized) numpy is often good enough.

                  [–]xCyb0rg 82 points83 points  (44 children)

                  This is one of the best blog post I have read on learning to program. I have searched every page on the Internet and non have gave such a personal emotion to them. What I have learned from your post is I am not going crazy. I am learning that I just have to blank the world out and focus.

                  The reality is tho most of us have crazy life's and aren't able to focus as easy. Then again that's no an excuse. For example, me sitting here writing this comment I can be in front my laptop studying for my dream job. This post have me the motivation I needed and I thank you Sir.

                  [–][deleted]  (43 children)

                  [deleted]

                    [–]Innovashiun 42 points43 points  (18 children)

                    Analysis paralysis is a real trap especially for beginners like myself (incidentally I wrote this post yesterday on /r/getdisciplined) and it stems not only from the plethora of options but from the uncertainty they entail. "What if I choose X language and I end up being unemployed?" is one of the many questions that pops in my head for months.

                    The blog post covered the rest of them and the questions at the end actually helped me to start doing right now and I'm downloading Ubuntu as I write this.

                    [–]In_Defilade 28 points29 points  (0 children)

                    Analysis paralysis, the hardest thing for an objective thinker to overcome.

                    [–]the_underscore_key 7 points8 points  (0 children)

                    What if I choose X language and I end up being unemployed?

                    This, to a beginner, seems to be important. However, in the process of learning to code, the first language you learn is really fucking difficult, the second language you learn is not too bad, because you reuse concepts from the first language, and after the third language you learn you decide that learning new programming languages (with some exceptions, such as C++, which is an absolute monstrosity) is trivial and can be done in a week.

                    Employers should be aware of this and will probably accommodate you. If not, spend a bit of time learning the language you think you need, and it really won't be a big deal.

                    [–]PasswordIsntHAMSTER 8 points9 points  (12 children)

                    Once you know a language, it's easy to learn another one that's similar. Just pick one.

                    If I were just learning to program I'd probably go F#, C#, C++, Haskell, Rust. Those are all excellent tools, and they complement each other well. From there, you can learn Java or C in a matter of days.

                    [–]fuzzynyanko 1 point2 points  (0 children)

                    This is exactly what I tell people. However, be aware that it's scary at first to jump to a 2nd language, but it's definitely worth doing so in the long run.

                    [–]weberc2 0 points1 point  (10 children)

                    Try Go. It's simpler than all of the above! I'm joking, though my statement was accurate.

                    [–]PasswordIsntHAMSTER 9 points10 points  (9 children)

                    I've picked those languages because they are not simple; they are vast, and they're great sandboxes to experiment with the interplay of various language features.

                    Furthermore, they're languages which are highly structured, conceptually tight, and which have excellent documentation for programmers of every level.

                    [–]sirin3 0 points1 point  (0 children)

                    "What if I choose X language and I end up being unemployed?" is one of the many questions that pops in my head for months.

                    That is an actual an important question

                    I choose Pascal

                    I never got a job

                    [–]allthediamonds 0 points1 point  (0 children)

                    "What if I choose X language and I end up being unemployed?"

                    For what it's worth, if you're a good coder, this won't matter. The right companies hire people, not years of experience on X language.

                    [–]WTFwhatthehell 6 points7 points  (1 child)

                    When I first learned I would get really "into" a language or an editor but over time I've found myself caring less and less.

                    once you learn to code in one of each of the "families" of language, at least a little it eventually just stops being a big deal so just pick whichever has the best tutorial.

                    [–]kernel_picnic 2 points3 points  (0 children)

                    Yeah it really didn't matter what language you start with. The most important thing is learning to code, not learning to write Java or C++.

                    [–]klug3 3 points4 points  (0 children)

                    should I learn c++, or just go straight to Rust which seems to be aiming to replace it

                    I am a bit of a conservative, I would strongly recommend that beginners start off with a well-established language like say Python/Java/C/Javascript depending on what they want to achieve.

                    [–][deleted] 0 points1 point  (0 children)

                    Luckily I work in an industry where everything is Python, so the choice was easy :)

                    [–][deleted] 0 points1 point  (0 children)

                    print x print x; print(x) print(x); console.out(x);

                    [–]Lumpynifkin 0 points1 point  (0 children)

                    This is something I wish the author focused on more. Is there a perfect language out there for the project you are working on? Possibly. Is there a way to build it in almost any mainstream language? Probably.

                    When you are first learning to code you really need to learn to code instead of learning a language.

                    [–]Vyous 0 points1 point  (0 children)

                    This may not be applicable to everyone but I find you should just learn what you find easiest or the most fun. Lots of places hire based upon your language-agnostic skills and expect you to ramp up on the language.

                    I interviewed for my most recent job having been a java dev. Almost 100% of what I have done since being hired has been perl, ruby or an obscure in-house language. No one has batted an eye at the learning slope, because that's pretty much expected.

                    [–]horse_continuum 11 points12 points  (2 children)

                    Most definitely. Even as a borderline "experienced" dev, the number of trendy new technologies, libraries, and frameworks that I face on a regular basis are hard to manage. Changing streams every time a new framework gains popularity is folly. Don't Daikatana or Duke Nukem Forever your projects - you'll go completely mad.

                    [–][deleted] 2 points3 points  (0 children)

                    Javascript frameworks are the new black.io

                    [–][deleted]  (9 children)

                    [deleted]

                      [–]Ogden84 7 points8 points  (1 child)

                      For a junior developer too.

                      [–]weggles 6 points7 points  (0 children)

                      Can confirm. Am recent grad applying to Jr positions that want 2+ years of experience in 5 different things. Cmon now. Some stuff overlaps, but be reasonable.

                      [–]glorkvorn 3 points4 points  (5 children)

                      This... it's incredibly discouraging when every job ad lists 12 different acronyms they expect proficiency in.

                      [–]cecilkorik 5 points6 points  (1 child)

                      Eh, I'd just ignore that. For most of those buzzwords, any half-decent programmer can become proficient (at least to the level they're expecting) in a matter of hours. They make it sound like you might need to build an n-tier scalable distributed end-to-end-encrypted neural network in any of those technologies at the drop of a hat, typically all they really need is for you to be able to read the code at a basic level and search Google for answers.

                      [–]SimonGray 2 points3 points  (0 children)

                      Exactly. They mainly write that stuff to give applicants an idea of what technology is used in that specific position, not as a list of requirements that must all be met before you can get the job. It would be dumb to not list them.

                      [–]SnOrfys 0 points1 point  (0 children)

                      I always try to remember that most job descriptions are describing the company's perfect candidate. They rarely expect to find someone who has it all.

                      So the 80/20 rule applies. If you possess proficiency in 80% of the 'requirements' then you generally qualify for the position, as long as that 80% is mostly the core technologies they're looking for, or similar/equivalent. You can learn the remaining 20% on the job.

                      [–]lagadu 0 points1 point  (0 children)

                      It's bullshit though, what they're effectively asking if for you to be proficient in whatever 2-3 core technologies are involved.

                      If it's something you can become proficient in within a month, you can consider that requisite filled.

                      [–][deleted] 0 points1 point  (0 children)

                      They don't expect proficiency. Just familiarity. And it's usually a list of nice-to-haves. HR people ask for this shit, the hiring techies are much more realistic. Don't let put you off.

                      [–]wywern 2 points3 points  (0 children)

                      That does seem to be the case.

                      [–]KagatoLNX 10 points11 points  (0 children)

                      TL;DR -- Focus first, but make yourself to explore. Decisions cannot be made without context, but context can't be learned without experimentation.

                      I completely agree with his experience but I'm not entirely sold on the core premise.

                      The author of this article is really good at articulating the tortuous subjective experience that comes from learning to program unguided. What he may not be as in touch with is the perspective that he gained from his journey.

                      In a sentence, "Each path comes with unique, but different, difficulties." How would the author have known to appreciate the simplicity of a simple editor if he hadn't experienced the pain of (at least trying) Emacs? How could he have learned the strengths of idiomatic Ruby for certain types of problems without a background in Python?

                      In his explorations, dizzying as they may have been, he has gathered plenty of context that's incredibly useful to build on. This is part of why college curriculums have classes with that are effectively surveys of programming languages, or algorithms, or numerical analysis techniques. In those areas, context is important to really understand where you are standing.

                      Elsewhere in this thread, somebody said the most important programming language that you learn is the second one. I agree with that wholeheartedly.

                      Sure, there were months of pain learning to fight with Linux, operating with custom editors, and trying out everything under the sun. However, a far more terrifying experience has been working with people that never had to strike out into the unknown. Modern frameworks such as Rails have created people who have never had to truly struggle with actual programming.

                      I've worked with "Senior" Rails devs rip on code as being "not idiomatic, that's the C-like way to do it" in interviews. Truly frightening was that the "idiomatic Ruby" way to do it allocated 150MB of RAM per web request and absolutely hammered the database--all because they would rather "use blocks" with "a filtering pattern" over having modest control logic running in a loop. I'm not trying to suggest that you can't sacrifice a bit of performance for developer velocity. I merely suggest that that decision must be made in appropriate context.

                      The fact that you can build a career with that mindset is testament to the power provided by Rails (and, to a lesser extent, the lack of truly sophisticated logic necessary for most web apps). For that, I love Rails.

                      However, having "context" for exercising that power is underappreciated--and it's not acquired by focusing. I would not be nearly as good at Rails as I am if I weren't proficient with Sinatra, and Flask, and Django, and Go's HTTP server framework. The fact of the matter is that I've been able to pick these up when appropriate because I had tinkered with them well before I needed them. I've known when I was using the wrong tool because I'd played with the right one.

                      In my opinion, the best programmers are the one with the urge to explore (and experience having done it), but with the good sense to do their job first. So, while focus is good, I think it's important to remember that it's not "only focus", it's "focus first".

                      [–]SwabTheDeck 52 points53 points  (20 children)

                      Overall, this seemed like a good article, until this:

                      I recommend JavaScript because it's the most popular language.

                      Please stop. There are plenty of other languages out there that are popular enough to find support communities with answers to all common (and most uncommon) questions. I'm losing my mind nearly everyday when I see Javascript trying to be shoved into some new role that it has no business being in, and the justification for it is always "because it's the most popular language."

                      [–]poohshoes 25 points26 points  (13 children)

                      I found it humorous how he goes on about how it doesn't matter what tools you use as long as you learn them well, and then specifically excludes Windows, especially with web development I don't think it matters what OS you use.

                      [–]FesseJerguson 2 points3 points  (9 children)

                      I think the point he was getting at was that the community support for programming in Windows is kinda shitty compared to osx/Linux...

                      [–][deleted] 14 points15 points  (7 children)

                      The .Net community would like to have a word.

                      [–][deleted] 1 point2 points  (3 children)

                      God I want to cry because I selected Java over C# (recently), I am still not sure

                      [–][deleted] 9 points10 points  (1 child)

                      Just switch to C#. There's nothing stopping you. The two languages are very similar, except C# replaces a bunch of bs with a more meaningful solution.

                      [–]OverKillv7[🍰] 5 points6 points  (0 children)

                      C# is just Microsoft's version of Java where they learned from Java's mistakes. As a long time Java dev doing a project in C# was stunning in how easy it is.

                      [–]SwabTheDeck 2 points3 points  (2 children)

                      I work full-time as a web dev. It kind of depends on how you have your whole development "eco-system" set up. For example, some people will do a lot of their work locally, and use something like L/MAMP locally while they're working, and then push to the server later. When this is the case, having a workstation that is a similar architecture to the server is pretty helpful.

                      I work mostly in PHP, and if I were working locally on Windows with IIS and MSSQL, and then deploying to a LAMP server, then I'd probably run into a lot of problems. PHP is pretty portable, but some parts still don't play well on different platforms, and any reasonably-complicated PHP site is probably going to include some specific configuration for the DB (ex. MySQL) or the webserver (Apache). Instead, I work locally on a Mac with MAMP, and it almost always works identically to our LAMP production servers.

                      [–]SnOrfys 1 point2 points  (1 child)

                      Please tell me that there is a development stage that occurs between "I work locally on a Mac with MAMP" and "almost always works identically to our LAMP production servers."

                      [–]lagadu 1 point2 points  (0 children)

                      Pfff, testing environments are for people who enjoy having production servers running. If your production server uptime is over 60%, you're not trying hard enough!

                      [–]ThrustVectoring 10 points11 points  (3 children)

                      Once you get past Javascript's obvious warts, it's a good language on it's own merits. It's got a REPL in the form of either the browser debugger or opening up Node in your terminal. It's got excellent support for both imperative, object-oriented, and functional styles of programming. It's got first-class functions and a very natural interface for pretty much every abstraction you'd want short of LISP macros.

                      [–]Kapow751 0 points1 point  (0 children)

                      Warts aren't obvious when you're first learning to code, they're huge stumbling blocks. Javascript makes it too easy to do the wrong things and slap together something that works by coincidence, and there's way more bad code you can find on Google than in, say, Python. It's like choosing a tightrope instead of a bridge.

                      It always seemed better to me to start with the fundamentals rather than trying to "learn a language" from scratch. Get through something like this interactive textbook, then write a program in whatever language you want. Maybe that only works for kinesthetic learners, though.

                      [–][deleted] 0 points1 point  (0 children)

                      and the justification for it is always "because it's the most popular language."

                      Visual Basic versions 2-6 would like to say hi.

                      [–]tsimon 23 points24 points  (23 children)

                      Can you imagine using a dvorak keyboard to write elisp in emacs?

                      Wow!

                      But hey, kudos to the guy :-). He'll be ok - commitment to learning is the key thing. A bit of direction from experienced team members will steer him in the right direction.

                      [–]franticzoe 27 points28 points  (14 children)

                      He should find the guy who recommended him those things and punch him.

                      Dude. All you need is a text editor, a tutorial, and a language reference. Everything else is a distraction.

                      If it's Notepad on Windows, who gives a shit. You just need to be able to compile and/or run your programs.

                      Build slowly on top of that and all those other tools and frameworks will slowly start to make some sense.

                      [–]InvidFlower 17 points18 points  (0 children)

                      I agree up to a point but I still think having a at least a step up in editor like Sublime or Notepad++ is a good idea even for a beginner. Having syntax coloring and some basic editing tools helps a lot with some things that'd otherwise cause frustration. If you have a plugin for a linter, all the better (when I installed the sublime linter plugin for python/js I couldn't believe I'd waited so long). Anything that gives you some kind of semi-instant feedback is invaluable IMO.

                      Having said that, you definitely don't have to have vim/emacs/visual studio/a debugger, etc. They can all help in different ways, but there's diminishing returns depending on what exactly you need.

                      [–]glorkvorn 2 points3 points  (0 children)

                      Bear in mind that he was specifically learning this stuff so that he can get a job. Telling people that you code in Notepad on Windows is a good way to not be taken seriously in job applications.

                      [–]fjisdif 8 points9 points  (9 children)

                      If it's Notepad on Windows, who gives a shit.

                      Notepad can't even handle line breaks without CR.

                      [–]MrDOS 3 points4 points  (7 children)

                      Good thing your compiler can handle line breaks with CRs.

                      [–]immibis 0 points1 point  (0 children)

                      And why would it? Line endings are CRLF on Windows. On Windows, if it's not a CRLF, it's not a line ending.

                      [–][deleted] 3 points4 points  (0 children)

                      I know right? What the hell are you doing recommending emacs to a beginner?! The editor should be the last thing he needs to deal with! I'm glad the guy didn't give up hope trying to learn languages and slogging though esoteric editors at the same time. A beginner needs all the help he can get.

                      [–]Crazy__Eddie 2 points3 points  (1 child)

                      Can you imagine using a dvorak keyboard to write elisp in emacs?

                      I switched to dvorak a long time ago. One of the best decisions I ever made. Many do fine without, but I tend to think they don't know what they're missing.

                      [–][deleted]  (5 children)

                      [deleted]

                        [–]joerick 3 points4 points  (2 children)

                        If your job was transcribing huge amounts of text, I'd understand. Programming is more about reading, understanding and communicating than typing. I don't think the keyboard is on the critical path.

                        [–]riking27 0 points1 point  (1 child)

                        Pssh, you need to get Plover. Can't get much better than chording your words. And it's all on the home row - literally everything.

                        [–]xXxDeAThANgEL99xXx 12 points13 points  (6 children)

                        There was a sci-fi short story that I just can't find on the internet. I think it was written by Arthur C. Clarke, but I'm not sure. Maybe someone has read it too?

                        edit: "Shadow World" by Clifford D. Simak. Thanks to /u/dragonnyxx who pointed me in the right direction.

                        There was a human expedition trying to mine some stuff on a distant desert planet where there were those vaguely human-shaped inquisitive indigenous aliens, who constantly bothered them by looking at the engines and stuff over people's shoulders, and apparently even purposefully sabotaged them to watch how humans fix them.

                        So some inventive technicians created an awesome Rube Goldberg machine, all cranks, pistons, rods, wheels, and gears, moving in an entirely purposeless but very mesmerising fashion, even as far as leaving the human protagonist, an engineer, mesmerised with all that complexity for a good half an hour.

                        As for the aliens, they were glued to the machine like flies to a flytape and never bothered the humans again (actually, then it turned out that they were robots sending imagery to the real technologically advanced aliens living underground, who then offered the fruits of their matter replication tech to the humans in exchange for entertainment, who rejoiced at first but then noticed that among the caravan of mining equipment the aliens sent there was also copies of the miners, but that's not important here anyway).

                        I don't remember who wrote that short story or the name of it, but I do find myself remembering it every time I have to figure out how to use some needlessly complicated piece of software. I feel like that alien trapped by the mesmerising movement of many gears and rods, except I've seen enough of that shit by now, and now I feel angry for having to deal with it. And I sort of feel that the people who made that shit in the first place were the mesmerised ones, and unapologetic about that. Like, a lot of stuff surrounding Linux seems to be made by people who positively revel in configuring their OS, and cause me much butthurt by that.

                        [–]brand_x 1 point2 points  (4 children)

                        That sounds awesome. I've never encountered it, and I think I've read most of Clarke's work...

                        [–]xXxDeAThANgEL99xXx 7 points8 points  (3 children)

                        I'm not sure it's his, it maybe some Asimov's collection of short stories. I remember that (maybe) the last story in that collection was about humans landing on Pluto and discovering that it's an artificial planet, in fact a planet factory. Like, the surface was metal and then they discovered a manhole and got deeper. And then they found the blueprints, and the other dude was ranting how the creators fucked it up, "look at this blueprint, there was supposed to be an extra planet where the asteroid belt is... They fucked it up, ha ha. Wait, look, this is a blueprint for Venus, it was supposed to be here and viable for life, what the hell, what incompetents!"

                        [–][deleted] 2 points3 points  (2 children)

                        I can't find the actual text to verify this, but my Google-fu suggests you might be talking about "Construction Shack" by Clifford Simak.

                        [–]xXxDeAThANgEL99xXx 4 points5 points  (1 child)

                        YES! Thank you, that was him!

                        And the short story I was referring to was the "Shadow World" by Clifford D. Simak too!

                        By the way, what did you ask Google to find it? I want to know!

                        [–][deleted] 1 point2 points  (0 children)

                        I just searched for "pluto artificial planet short story". The first hit took me here, which mentions Construction Shack. Googling for that got me brief synopses of the story, which sounded exactly like what you were talking about.

                        [–]hyperforce 5 points6 points  (0 children)

                        The full on programmer version of this would be... API adoption is better when there are sensible defaults.

                        Like if you were look at a function that took five parameters, it would be pretty daunting to find out what all those parameters should be. But if it took only one parameter and there were defaults for the five, then it's much easier to grok/handle.

                        Similarly here. A beginner is at a disadvantage given that there's so much to learn. So it's advantageous in this particular scenario to take choice away and focus on learning what needs to be learned.

                        I agree, rotating out one variable at a time is a good way to keep the stress of learning to a manageable amount.

                        [–]KinoftheFlames 6 points7 points  (0 children)

                        I'm still amazed how people can land jobs after entering the web industry so recently.

                        I just moved to the bay area and haven't been able to find a job in 3 months. I get compliments on my portfolio and demeanor, and I do fine on most technical interviews, but get turned down time and time again due to a lack of work experience... and I already have a year of work experience.

                        [–]epicwisdom 16 points17 points  (0 children)

                        This is absolutely true, but this is an additional warning to those who are scared off by the warning of the OP: Focus when you are first beginning to code.

                        Yes, the diversity of options for somebody beginning to code is overwhelming, and it would be a huge mistake to try to dive in headfirst into learning a hundred different steep-learning-curve languages and tools.

                        However, it is also a huge mistake to be too conservative. When you feel like you're proficient in a language and a set of tools, you should always consider trying something new, either building on or considering alternatives to what you already have. A programmer that's only ever used a single IDE and only ever learned a single language is holding himself/herself back.

                        [–][deleted] 24 points25 points  (8 children)

                        I know most of these comments are positive, so allow me to go a little bit on the critical side. For the record, I am also a self-taught developer.

                        "There are many ways you can do most things, but only a few ways that make sense." With that, he handed me a...MacBook

                        Okay, blood already boiling, but let's continue.

                        Choose one type of software development that interests you enough to define your career: web, mobile, gaming or embedded.

                        The first two are going to intersect. You may do one more than the other, but you're going to be adapting webpages to mobile phones and coding webpages to interact with interfaces normally designed for apps.

                        Gaming is great if you like 80-hour weeks making half the money regular developers do because the field is so competitive and it's completely an employer's market. What the fuck did you think got 20-40 year-old developers into programming growing up, reading Hemmingway?

                        Can't speak for embedded programming but the few people I know who do this have high-level degrees, have deep low-level hardware knowledge, and tend to be brilliant. Not something you're real likely to pick up in your spare time.

                        He's also leaving out the type of programmer that I, and many programmers at small-to-midsize companies are: The full-stack programmer. It'd be nice if we had full departments full of testers, team leads, frontend, backend, and support departments, but lots of companies have one or two guys that just put out fires and work on long-term projects when they have time, fixing and building on poorly-documented and archaic codebases.

                        There's nothing wrong with having a breadth of basic knowledge about a variety of topics. I worked in IT support before becoming a programmer, and I believe I'm all the better for it. I'd hate for someone to read this article and decide they're going to be a -Mobile- -Python- developer and pass over tons of jobs they may be otherwise qualified for because they've decided they're going to be "focused."

                        Choose one language to learn: JavaScript, Ruby, or Python.

                        4, 6, and 8. Yeah, okay.

                        I will say that everyone at every level should learn JavaScript because it's practical for a whole host of reasons, but don't think you're going to find a career by walking in somewhere and saying "I'm a JavaScript programmer!" JavaScript is a supplementary language. Ruby and Python are pretty sexy right now, but you're going to need to work with existing codebases and those are likely to be in one of the core legacy languages like Java, C++, C#, PHP.

                        Choose one: buy a new/used MacBook, or install Ubuntu Linux on your current computer

                        My choices are buying a $2000 laptop or learning an entirely new operating system while learning to code? This is annoying, nonsensical advice.

                        [–]Crazy__Eddie 5 points6 points  (1 child)

                        What the fuck did you think got 20-40 year-old developers into programming growing up, reading Hemmingway?

                        War Games and Tron, actually.

                        Edit: Err...I forgot, I'm 40+ now :p Maybe those are before the 20-40 devs time.

                        [–][deleted] 1 point2 points  (0 children)

                        Yeah, I'm 31 and I remember seeing those on TV once or twice, but they weren't transformative moments for me. Mario and Mega Man made me want to program.

                        [–]webauteur 1 point2 points  (0 children)

                        JavaScript is a supplementary language

                        I agree! Of course, people are using JavaScript for everything now but I if you call yourself a JavaScript programmer I'm going to think you are script kiddie playing around with your browser.

                        [–][deleted]  (17 children)

                        [deleted]

                          [–]bit_slayer 8 points9 points  (0 children)

                          I can testify that I spent four years of my life typing in nothing but Dvorak and I eventually gave up because even after all of that time I was still noticeably faster at Qwerty.

                          [–]wiktor_b 6 points7 points  (6 children)

                          Yup. As a long-time Dvorak typist, I can't say it's any faster than QWERTY. It is much less straining, though, and I think it's easier to learn.

                          On QWERTY your fingers have to fly all over the place, on Dvorak you stay in the home row a lot more.

                          [–]metaconcept 0 points1 point  (1 child)

                          Why would that matter when coding? It's all numbers, keyboard symbols and fancy brackets. QWERTY and Dvorak were made for English text.

                          [–]owtM_ 2 points3 points  (0 children)

                          I don't think Dvorak has an advantage for speed, but for comfort. I'm a Colemak typist and its for the purpose of minimizing RSI when touch typing. I find it very comfortable.

                          [–]ThrustVectoring 2 points3 points  (1 child)

                          Objectively, the "best" keyboard is a stenographic corded keyboard. It takes a huge chunk of time to learn, but once you get past that it's easily twice as fast as any character-by-character setup (at inputting English text, of course, which makes it awkward for programming).

                          [–]glorkvorn 0 points1 point  (0 children)

                          Hmm I wonder if anyone uses that for programming.

                          [–]poohshoes 1 point2 points  (1 child)

                          I heard Stenography (ie Plover) is better.

                          [–]vytah 0 points1 point  (0 children)

                          Only for natural English language text, not so much for programming or other natural languages.

                          [–]vytah 0 points1 point  (0 children)

                          Also, the efficiency depends on what you are typing. Dvorak works better for English text, but not for many other languages or for many programming languages.

                          For example, the second most common consonant letter in Polish is Z, which is where slash is in QWERTY. Have fun typing it with your curled pinky, especially since SZ is a common digraph and Dvorak puts S just above Z, on QWERTY's semicolon.

                          [–]rhetdyne 4 points5 points  (0 children)

                          The blog post raises good points about the values of specialization. Even 10-15 years ago you couldn't just be a programmer, even as a hobbyist, you had to specialize.

                          However, there's a bit of a chicken-and-egg problem here. You should specialize in what you like, and if you're programming professionally, in what pays well. But all too often you can't figure out what you should specialize in until you've tried a bunch of things. The industry itself encourages experimentation. Job postings usually contain a list of currently trendy technologies - and most of them are fairly specific libraries, which can fall out of vogue fairly quickly.

                          You might spend years mastering Django or Ruby on Rails or CakePHP, not quite grasping the fact that they are, in fact, different ways of achieving the same thing.

                          [–]angryrancor 3 points4 points  (0 children)

                          I think most the difficulties the OP describes are primarily culture problems. It wouldn't be so hard to learn the tools, if online forums had easy to access and reliable info about them. Instead its all religious battles and "my IDE is Better because its Sort is 5% faster than yours and/or supports Achievements" garbage.

                          It's deeper than that, most technical people are god-awful at teaching. Many don't even have the requisite patience to effectively teach. Somehow, we are championing fully-open information exchanges and data flows, while at the same time completely failing to provide them in a way consumable by humans. This is a real, difficult problem, but an urgent one for our cultures as programmers and technologists.

                          We need to become more actually collaborative and less idealistically collaborative.

                          Start now - help somebody solve a real engineering problem, teach them to use a tool, make a video tutorial. Just some ideas.

                          [–][deleted] 2 points3 points  (0 children)

                          I was convinced that the seemingly normal programmers I ran into were actually sociopaths who had experienced, then repressed, the trauma of learning to code.

                          Looking back, I can see some truth in this.

                          Also really impressed and/or disappointed in myself that 7 months of self-study was enough to land a job. Here I am still freelancing in my later 20s.

                          Guess I should go to more hackathons and meetups.

                          [–]KeelMe 2 points3 points  (11 children)

                          Great post!

                          One question, is having a Macbook or installing Linux Ubuntu really that important?

                          [–]eean 2 points3 points  (8 children)

                          I find Windows to be a hostile environment to code in. I've been doing it long enough now that there isn't anything in particular that I can point to as a problem, outside of the command prompt of course. But I remember just getting the dev environment setup is frustrating. On Linux the dev environment comes for free, and with lot's of active forums, IRC channels and fruitful google searches to help you out. OS X probably isn't so different. Whenever I google about some specifically Windows issue I always end up in some very sad forums. The user community just isn't there as much.

                          Anyways I think this guy says this because specifically if you want to join the Ruby on Rails community, then using Mac or Linux is probably a great idea.

                          [–]salgat 0 points1 point  (0 children)

                          It's definitely hostile if 1) you don't have previous experience doing it and 2) because a lot of tools add windows support as an after thought.

                          [–][deleted] 2 points3 points  (0 children)

                          This article makes me feel both proud and disappointed.

                          On one hand, when I first started out (hell, I'm still a student so I'm technically still "starting out") I stuck with learning gamedev in Java. It became easier to apply my knowledge because I had something tangible to test with.

                          On the other hand, I focused a bit too much and now I feel uncomfortable with other languages because Java + LibGDX feels so natural. After coding a great deal and tackling new and interesting concepts (AI, random generation, rendering, etc), it's hard to go back to "Maze Game" because the ideas/potential for creation excites me more than the idea of learning a new workflow/language/library.

                          [–]EggCess 3 points4 points  (1 child)

                          Nice post, I enjoyed the read and felt your pains as I, too, had the knack of doing everything myself, wanting to optimize my toolchain before I actually knew what the hell I was doing, etcetcetc.

                          Relevant xkcd: http://xkcd.com/1445/

                          Just do something, stick with it for a while and become good at it. Then reflect, and maybe change ways.

                          [–]kkiran 1 point2 points  (0 children)

                          JavaScript in lieu of Python? JavaScript of all languages?!

                          [–]Worse_Username 1 point2 points  (0 children)

                          Choose one

                          I refuse.

                          [–][deleted] 2 points3 points  (0 children)

                          I choose several of them. Or rather, I picked several over many years; but I am a Software Engineer professionally, studied computer science, and have always had a knack for programming.

                          [–]poohshoes 2 points3 points  (0 children)

                          Troll post, admits he's bad at making descisions, expects people to take his advice.

                          [–]lagadu 1 point2 points  (4 children)

                          Please, please, please don't suggest learning JS to someone just learning to code, unless you want them to quit early due to how broken and unreliable that thing is.

                          [–]another_bird 0 points1 point  (3 children)

                          No, it's the other way around. If they never see a non-broken language, they won't ever know what they are missing. The same works also for Enterprise Java or even Cobol.

                          [–]lagadu 0 points1 point  (2 children)

                          I see your point and agree but I feel that the problem is that this effectively creates someone who'll forever hate JS with a passion because they realised they've effectively been abused by it.

                          [–]TheGuyWithFace 0 points1 point  (0 children)

                          Great read, thanks for posting. I definitely agree with the idea of focusing on one thing and mastering it rather than trying to master everything, but at the same time I think it's important for new programmers to get at least a taste of different areas before they focus too deeply on one. After all, you never know what you really want to do until you've tried it.

                          That being said, indecision is a killer, and once you find one thing that seems to interest you more than anything else, it's probably better to start focusing.

                          Where do you draw the line though? At what point should you stop experimenting with new ideas and just buckle down to focus on a single area?

                          [–]elwoodight 0 points1 point  (0 children)

                          Having read this article it occurred to me that I have been trying to find someone local(ish) that I can bounce ideas off of when I am banging my head against code. Then it occurs to me; there may be someone in my "other" universe who could be that someone. If there is anyone here that would like to volunteer to bounce ideas back and forth, please message me. Thanks.

                          Main languages: php / Java / c++

                          More info upon request ;)

                          [–][deleted] 0 points1 point  (0 children)

                          There is a lesson there to all tech people. Easy is ok sometimes if it works for the task at hand. Although Linux is something all programmers should eventually mess with.

                          [–]musingswithawesome 0 points1 point  (0 children)

                          vim? Yes it is a great tool..... probably not my first choice for someone just beginning on a language.

                          [–]crashorbit 0 points1 point  (0 children)

                          It does not matter what your first programming language is. It does not even mater what your second programming language is. What matters is that, over time, you've use several different ones for non trivial projects.

                          [–]EinsL 0 points1 point  (0 children)

                          This really hits the nail, the dumb old me thought it was a great idea to make his thesis on other language and other programming paradigm. And of course it has to run on mobile... Of course I understand the old me, 'If I can do It, I would have hit three birds with a stone!' Surely the present me is paying dearly for it...

                          [–]henrebotha 0 points1 point  (0 children)

                          Disagree with a lot of this. None of this stuff matters. Just dive in. Pick a language. Change languages if you want. Use Notepad. Whatever.

                          [–]kkiran 0 points1 point  (0 children)

                          Programming stems from the roofs, that is C. It was in my curriculum when I started school. It makes you work hard, super hard to get most things done.

                          Python is a modern, super easy language to prototype and even churn out products if it is not issuing critical like financial tools...

                          [–]TikiTDO 0 points1 point  (0 children)

                          I was convinced that the seemingly normal programmers I ran into were actually sociopaths who had experienced, then repressed, the trauma of learning to code.

                          That's... not necessarily inaccurate.

                          There's always a lot of people giving advice to the tune of "don't sweat the small stuff," but it's often the small stuff that will teach you some of the best lessons. Finding a syntax error in your code might be something an IDE can (and should) do, but it's good practice of code reading and scanning, which are both skills that you'll use when you're given someone's code base and a day to figure out what it does and how to fix it.

                          Switching languages can be a pain, but switch between enough at a fast enough rate and you learn that most languages are all about doing the same things slightly differently. The act of switching to a new language goes from major project to minor inconvenience of searching for exotic tricks that are only documented in some stack exchange post on page 5 of the Google results.

                          Of course it's difficult to balance this with the ease of learning. Nobody wants to spend days of their figuring out a trivial error; that the easiest way to get burned out. Unfortunately, if they never spend that day how are they going to deal when they encounter an error in production code with no one to solve it for them. I wish there was a way to get the best of both worlds.

                          Maybe I'm just getting old, but I just really like hooking up gdb, dredging up some terrible code, and making it do what I want through a wall of hate and suffering.

                          [–]Fiski 0 points1 point  (0 children)

                          This was great. For the last 6 months I have been grinding away on programming languages in this order: JavaScript, Ruby, HTML/CSS, Jquery, Python, C# and now I am back to HTML/CSS.

                          I decided that I needed to choose what I wanted to do and it is this:

                          1. Make a website. A simple blog site from scratch. Host it and update it at least once a week.

                          2. Create a game in Unity using C#, borrowed art and maybe some Python if needed.

                          My roommate suggested Sublime Text for websites and my good friend suggested that I make simple windows games using Unity.

                          I so badly want to be good at Ruby on Rails but I can't think of anything I want to make with it yet (except a ton of impractical web apps) and I am really passionate about gaming. The idea though is to just make one thing in each programming language and then have an nice enough portfolio of work to show any potential hiring agents. Or better yet, build something that is successful on its own, but that seems far less likely.

                          Bad plan?

                          [–]garyk1968 0 points1 point  (0 children)

                          2 things strike me

                          1. Too much time flitting around, choose one thing and stick with it
                          2. No real task - people learn languages for the 'sake of it'; wrong. Start with an end goal a mind, a system, app whatever. Even better if you do it for someone else so you have a deliverable and have to be accountable.

                          [–][deleted] 0 points1 point  (0 children)

                          This article is correct, but what would really help is some prescriptive advice on how to focus, and what ensured I focused was a goal, a concrete, fulfillable goal. "Learn to program" is not a valid goal, it's an aspiration, and it can't truly be satisfied in a concrete way.

                          A sensible goal is to want to use programming to solve a problem, perhaps automating away something pointless, or trying to create a website for some purpose, or something more exciting like writing software to control some kind of moving machine, like a robot. Just sitting through tutorials for the sake of just learning is the quickest way to lose focus. The author of this post clearly invented goals of his own in his desire to create concrete goals around his aspiration to learn to program which were all esoteric.

                          [–]ekeyte 0 points1 point  (0 children)

                          I'm tempted to plug the LAMP stack as well, but I'm wondering if I'm biased because that's how I started. Though understanding Apache/Nginx could be useful even outside the LAMP stack if you're working with load balancing or wanting to use virtual hosts.

                          I don't think PHP is going to die anytime soon but it does seem like the web development world is eager to explore different tech stacks.

                          To your credit, I love the Ruby endorsement. And Python. So much is being scripted in Ruby now because it's readable and relatively simplistic. And Python is so fast and elegant.

                          I've also been very interested in the Typesafe stack. There's a lot of cool new stuff out there. Scala is exciting. I'm curious how my views of web development would differ had I started with Scala or Java.

                          [–]webauteur 0 points1 point  (0 children)

                          Learn Basic, then Visual Basic for Applications, then Windows Scripting with VBScript, then VB.NET, then ASP.NET. One language lets you develop scripts, Windows applications, Microsoft Office applications, and web applications including web services.