Slashdot Mirror


Ask Slashdot: Can an Old Programmer Learn New Tricks?

An anonymous reader writes "I have been programming in some fashion, for the last 18 years. I got my first job programming 15 years ago and have advanced my career programming, leading programmers and bringing my technical skill sets into operations and other areas of the business where problems can be solved with logical solutions. I learned to program on the Internet in the 90s.. scouring information where ever I could and reading the code others wrote. I learned to program in a very simple fashion, write a script and work your way to the desired outcome in a straight forward logical way. If I needed to save or reuse code, I created include files with functions. I could program my way through any problem, with limited bugs, but I never learned to use a framework or write modular, DRY code. Flash forward to today, there are hundreds of frameworks and thousands of online tutorials, but I just can't seem to take the tutorials and grasp the concepts and utilize them in a practical manner. Am I just too old and too set in my ways to learn something new? Does anyone have any recommendations for tutorials or books that could help a 'hacker' like me? Also, I originally learned to program in Perl, but moved onto C and eventually PHP and Python."

22 of 306 comments (clear)

  1. Practical application is the only way by Karmashock · · Score: 5, Interesting

    You have 18 years of learning by doing.

    Classes and tutorials are not what got you there. You did things.

    Name a program you could make in C or perl that you know well. Now try one of the new languages you wish to learn and set the goal of making that program in that language.

    Then do it.

    You'll have to look up syntax etc for every little operation. But you'll learn. And once you know how to do that you'll have the confidence and core knowledge to bootstrap yourself further.

    --
    I've decided to stop wasting my time responding to AC trolls/sockpuppets... so if you want a response from me... login.
    1. Re:Practical application is the only way by Chrisq · · Score: 4, Interesting

      Name a program you could make in C or perl that you know well

      Actually I think you should take this a step further, not just taking a program you could write, but one you have written already. This turns the exercise from a programming-from-scratch to a porting one: All logical problems were solved when you wrote the original version. Now you can concentrate on the details of the new language/framework/whatever.

      This will work well except when you are switching to a new programming paradigm. If you rewrite a program you originally wrote in a procedural language in a mixed or object oriented language (python, java, scala, ruby, etc.) you will have to work very hard not to code a procedural solution. Similarly with a functional language - but you are more likely to struggle to write something procedural in haskel or ocaml.

    2. Re:Practical application is the only way by Hognoxious · · Score: 4, Insightful

      If you rewrite a program you originally wrote in a procedural language in a mixed or object oriented language (python, java, scala, ruby, etc.) you will have to work very hard not to code a procedural solution.

      That might happen if you try to translate it routine by routine. The result will be similar to if you translate a text using only a dictionary; as my Latin teacher used to say, "Don't translate the words, translate the ideas."

      The right way is to treat the version in the old language as a specification or a reference version.

      P.S. Avoid the temptation of adding fixes, enhancements etc, at least until V1.0 is done; if you're going to drift off the model, you might as well say sod it and make something new.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    3. Re:Practical application is the only way by VortexCortex · · Score: 5, Interesting

      Name a program you could make in C or perl that you know well. Now try one of the new languages you wish to learn and set the goal of making that program in that language.

      My GOTO program for this is Tetris.

      It has everything from input to timing to graphics, audio, network state synchronization, even custom asset data storage of the shapes or push notification of high scores. You can make it in everything from Ada to Brainfuck, on any output from printed paper to LEDs connected to a parallel port, from the command terminal to 3D data visualizers. The state is minimal enough to manage in 100 DWORDS, but complex enough to learn the efficiencies of joins, etc. in a SQL DB.

      It's simple enough to code in a few thousand chars, yet can cover all the bases esp. if you factor in "cheat prevention" (read: server side validation and user authentication).

      In my experience the older you get the more efficient you are at learning a new platform. Programming becomes a meta task of translating solutions into the platform's problem space. Do it long enough and you'll end up writing your own compiler for a meta language so that you can simply add a new platform "runtime" to the supported target language lists, check off which subsystem to output in what language, and deploy existing solutions faster than these noobs can say "expressive"...

    4. Re:Practical application is the only way by Applehu+Akbar · · Score: 5, Insightful

      Now for the unprogrammable task: try to convince management that you can still code after 40.

    5. Re:Practical application is the only way by Chelloveck · · Score: 4, Funny

      My GOTO program for this is Tetris.

      Dude, don't you know by now that GOTO is considered harmful? And you call yourself a programmer!

      --
      Chelloveck
      I give up on debugging. From now on, SIGSEGV is a feature.
  2. what you need them for? by gl4ss · · Score: 5, Interesting

    maybe that's your problem. just taking a framework and using it for nothing leaves you with nothing.

    most "frameworks" are just gobbled up shit anyways, quite often now consisting of other frameworks which consist of other frameworks and so you end up with something that serves a tcp/ip connection, serves 100kb of files but somehow manages to take up 300mbytes of disk space and 600mbytes of ram...

    so whats a hip framework today? is it hip because it's actually good? unlikely. as proof just check what was hip and cool 10 years ago, 9 years ago and so forth.

    --
    world was created 5 seconds before this post as it is.
    1. Re:what you need them for? by gweihir · · Score: 5, Insightful

      I agree on the framework quality. Also, their primary use is to allow people that cannot program well to get something done (badly). Last time I looked at a Java-Framework, I came to the conclusion that using it is a gross violation of all standards of professional code generation. One effect is that it takes people months before they can do even simple things.

      Fortunately, my current project requires speed and efficiency, so no frameworks, but raw C from the ground up. (Libraries like OpenSSL or PCRE are fine.) The project before that I used Python as glue and C as worker. Still no frameworks.

      Personal recommendation: Avoid frameworks. They create far more problems than they solve. And they slow everything down.
       

      --
      Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    2. Re:what you need them for? by hattig · · Score: 5, Informative

      And which framework was that? If it's targeted at "enterprise" use, then speed and efficiency won't be one of its core features, not with runtime annotation processing...

      For example, Apache Wicket is a gross bloated thing to avoid the "horror" of learning how to program a web UI in JS that communicates with the backend server using sane RESTful APIs. OTOH it saves you from writing those APIs and keeps your codebase in a single object oriented language.

      Hibernate is a gross-but-cool thing that saves the developer from touching JDBC. It's overhead pales in comparison with the network latency/RTT and database effort though, and it allows the programmer to again do database operations at a decent OO high level. Personally, I prefer JDBC but that can end up with a lot of boilerplate code to do simple operations. But OTOH you could end up with dodgy DB code, failure to try/catch/finally properly, etc. HQL can DIAF.

      And Spring ... Spring does everything. Dependency injection is a major advantage (until you use it, you might wonder why your "EntityManager" class is not good enough), interceptors, etc. Ignore the MVC crap, that's old hat.

      And tooling is another thing. Maven is essential for the Java developer today. Until I used it, I was happy with Ant and manually updating dependencies. Selenium is an essential web UI integration test tool too. Anything that makes testing, integration testing, etc, easier should be welcomed with open arms. Team-based development is a recipe for breaking code contracts in multiple places.

      There are a lot of new tricks that a programmer that has stayed in a comfortable role for a long time could have missed, and find problems when looking for a new job. Luckily, a good C programmer is unlikely to be applying for Java roles, and roles are often now in the embedded marketplace where frameworks are less common over raw C with common libraries.

      And there will be plenty of people that disagree with everything I've written. The joy of programming, eh?!

  3. Specialism by Anonymous Coward · · Score: 5, Interesting

    I'm in about the same situation, except that I'm not 100% autodidact (I *did* learm programming at school, back in the 1970's), and I sometimes feel the same.

    There's one observation though: we've got a number of 'junior programmars' here, fresh from school.
    They're all extremely good at what they do, much better at using a framework than I am, but at the same time they're not even competent in stuff I consider elementary.

    Among them are 4 (four) Flash developers. As a test, when we moved to another building and they all got new computers last year, I made them configure their mail reader (MS Outlook) by themselves. Just gave them each a piece of paper with everything they needed, set them loose, and observed.
    One immediately came back asking for help, and two of the others wouldn't have got it working without assistance from the fourth.

    Those same four are proficient in Perforce (source management) because they were taught how to use that that at school, and when they were hired, the person who hired them (who left the company since) installed a Perforce server especially for them. When I tried to make them switch over to Subversion because that's what I and everyone else uses here, three out of four complained that it was too difficult. Even with Tortoise as a client.

  4. yes by Coeurderoy · · Score: 4, Informative

    Although 18 years of programming is barelly adolescence ... (I started with fortran IV because fortran 77 was still being implemented ...
    Now let's assume that you want to learn to write Fubarish code, you'll find out that there are at least five major languages/IDEs/Frameworks to Fubar...
    Choose one, preferably one of the "bigger ones" and make sure it's activelly maintained...

    And then take a deep breath, and know that IT WILL TAKE TIME .... the issue is not that you really need to "learn new paradigms" in most cases it's just rather minor variations of old ones (some time very neat variations, that is the fun part)... the issue is that you "almost understandn but yet it does not seem to make sense"...

    The issue is similar to adult learning new languages vs children learning... adults do not really learn slower than children, but they want to express themselves correctly and speak about "interesting things"...
    Kid's are happy to say "see spot run, give ball me !", adults feel frustrated by this and have trouble making the initial steps...

    So be patient and for instance try something like meteor or angular and try to make an ugly "hello world" app... (or what ever is relevant to what you'd like to build ...)
    then "hello world, AGAIN and I'm the best" app...
    then "hello "
    etc...
    at some point after five time more time than you initially thought it will hit you ... "I did it !" ....

        Good luck youngster :)
          (and now get off my lawn ...)

  5. You have already given up... by ChrisKnight · · Score: 4, Insightful

    If you think fifteen years in the profession makes you an 'old programmer'.

    --
    -- This sig is only a test. If this were a real sig it would say something witty. --
  6. No by phantomfive · · Score: 5, Informative

    Am I just too old and too set in my ways to learn something new?

    No. This question> comes up all the time on Slashdot.

    Honestly, from your description (which is too short to be certain, of course), and based on other programmers I've known with similar symptoms, you give up too easily, and that is your problem. Every programmer eventually runs into something that is hard. The key is to keep at it until you understand. Read through the Javadocs for Java until you understand how they are organized. Or whatever framework you want to learn.

    It's primarily a matter of not giving up until you have it learned.

    --
    "First they came for the slanderers and i said nothing."
  7. It's Never Too Late! by buchalka · · Score: 5, Interesting

    I've been a programmer (mostly) for the past 25 + years.

    At 16 I wrote my first computer game, love it and then... Stopped.

    Used Fortran, Cobol and stuff and eventually Java Enterprise stuff.

    Realised I HATED IT!!

    At 46 decided games were my passion (should have continued from my first game at 16).

    Fast forward 3 years I feel proficient in Objective-C, Cocos2D and other game frameworks - I absolutely love it. 3 published games later and a pile of other stuff - Having the time of my life.

    Do what you love is all I can say to anyone readying this.

    And if you want to learn IOS there is NO BETTER COURSE out there (yeah I like capital letters) than the free Stanford CS193P course on iTunes - Google it.

    Paul Hegarty rocks as an instructor.

    Embrace it, I am living proof its never too late!

    --
    Games Programmer And Designer
  8. I've been learning new things for 30 years by AccUser · · Score: 4, Interesting

    I started to learn programming at the age of 11, and two years later had a 'summer job' writing software for a contracting firm in central London. That was in 1984. I'm now 43 years old, and am still learning new things. I stopped contracting a couple of years ago for a simpler life, and my software development is more about scratching my itch rather than a clients, and it is certainly more interesting that way. If you're not motivate to learn something new just for the sake of it (I'm a big fan of Duolingo and Khan Academy) then you're going to have to find that itch for yourself.

    --

    Any fool can talk, but it takes a wise man to listen.

  9. Translation by Max+Threshold · · Score: 4, Insightful

    "I played around at writing code, but I never actually learned any of the other skills that are just as much a part of being a programmer."

    If you haven't learned those skills in fifteen years as a professional, the problem isn't your age. I became a professional programmer at the ripe old age of thirty-six, and learned all the skills you're afraid of in my first year on the job. I had to!

  10. It's okay to be tired of programming by neiras · · Score: 5, Insightful

    Years ago I actually burnt out. I felt like I couldn't learn anymore. I kept sitting down in front of my editor and going through the motions, wondering where the inspiration was, never able to click into the zone, chasing focus, being unproductive.

    I took three years away from code. I got married and started a family. I worked at a relative's construction company. At first I had to force myself not to think about tech. Then I found myself actually forgetting about it because I was doing other interesting stuff. Eventually I realized I needed some software to do something, so I sat down to build it and the old joy was back. Everything felt fresh again.

    Recommend you take a break and do something completely different - for years if necessary. You only live once. You might come back to software, you might not. Do what's right for you. The programming world will still be here rediscovering old design patterns and handwaving about the latest development process fads if you choose to get back into it.

  11. You appear to not know fundamentals. by tlambert · · Score: 4, Insightful

    You appear to not know fundamentals.

    This is very common with self-taught programmers, or programmers who came up through either vocational training, or programmers who were apprenticed into their jobs. Unfortunately, this makes you much less valuable, because you probably don't know the proper terminology to use when referring to a specific algorithm, or you do not have a working knowledge of rarely used data structures, or you do not know object oriented programming paradigms. Minimally, you are going to be handicapped when you are trying to communicate about these things with your peers - in other words, people who have a formal education in these things can use a shorthand you can't, and as a result your communications bandwidth is considerably less than theirs, when talking about technical aspects of the work.

    The first key to understanding frameworks is that there is an inversion of control: the framework dictates the control flow, not you. This may come from after you call into a framework functions, but in the simplest implementation, it comes from you not getting to write your "main" function. If you have used yacc, and did not supply your own main because you have linked to liby.a and used the liby.a supplied main() and yyerror() routines, then you have used this type of programming. If you have used rpcgen and used librpc.a to supply the main() for your program, you've also done a similar thing.

    The second key to understanding frameworks is that you are allowed to extend, but not modify, a framework. Extension is done by overriding callback methods, or by providing additional event processing by hooking the default action, which is typically an error action. For this to be understandable, you need to have a minimal understanding of object orients programming. It's perfectly possible to do object oriented programming in C (in fact, libXt and libAw and other widget toolkits in X Windows did exactly this, prior to wide availability of inexpensive C++ compilers. If you've ever had a pointer to a structure that contains function pointers, and substituted one set of function pointers for another by setting the structure pointer through which you call things to one structure instance or another, you've done this. In simplest terms, you can write a function that gets called when you press a button, but you can't change the fact that it's a button, or the fact that when the UI sends an event into the framework, that causes your function to get called when the user clicks the button.

    The third and final key to understanding a framework is that things have default behaviours. If you don't supply a function to handle a particular event, then the framework is going to supply one for you. For example, if you have a menu bar with drop down menus, the main menu will probably have a quit option. If you don't supply a function to implement the quit (e.g. popping up a dialog and asking if the user wants to save their work, if they've done any), then the default action will happen instead, and the program will quit - without saving the changes, since it's your responsibility to know that there were document or settings changes, and it's your responsibility to warn the user, if the user needs warning.

    You might have some minimal knowledge, through use of Python, of the very basics of frameworks, but since the language doesn't actually force their use, then you probably don't have a very good understanding beyond that.

    My suggestion would be to take a class or seminar on object oriented programming; one thing that's pretty popular is the Stanford series on iPhone programming using Objective C, which will also teach you concepts about object instantiation and messaging, which are things you might need to know on top of just object oriented programming.

    You'd also do well to learn a compiled object oriented language, like C++, if you opt out of learning Objective C, rather than relying on "getting it" by using a language which doesn't force object orientation on you. At the v

  12. Re:If you need to ask, then for you the answer is by serviscope_minor · · Score: 4, Insightful

    If you have to ask Slashdot, then I'm afraid that the answer is no,

    Nope, this answer is utter horseshit.

    I've encountered the same framework madness as the OP. I've come to the conclusion that 99% of them are utter drivel and it's almost more work to figure out how to use it than it is to code it from scratch, which makes it kinda useless as in the latter case you get much better flexibility.

    Basically, it seems like they make the easy 80% of a problem tribial and the remaining 20% nearly impossible. Better to stick to good libraries instead.

    Elaborating a bit, the GP like me learned from lots of available material in the old days. In those days, the lack of frameworks and general flatness made things a bit more straightforward. Basically you could figure out what things meant at a fundemental level fairly quickly. With the vast modern frameworks, there seems to be much more trusting in the magic of them, and that doesn't sit well with someone who has a decent nuderstanding of programming, operating systems and architecture.

    My advice, ignore the mega frameworks if possible, and don't onfuse them with handy platforms and avoid those as well.

    --
    SJW n. One who posts facts.
  13. wow by Tom · · Score: 4, Interesting

    Someone broke Betteridge's Law. That's quite a lot more interesting than the actual question, which is, of course, dumb.

    That only young people can learn is one of those myths that get debunked all the time and no one ever pays any attention. You know that bullshit about language and how children pick up languages (including their mother tongue) magically while adults struggle so much? Yeah, it's total bogus, in fact adults learn languages faster and better than kids with the same investment in time and dedication.

    The main difference is that young people in practice learn faster because they have little else to do. If you'd get the same exposure and personal teacher attention as a small kid does, you'd pick up a new language in half the time.

    So the real question is: How much time and effort are you willing to expend? Is it something you really want and are willing to spend a few hours a day on?

    --
    Assorted stuff I do sometimes: Lemuria.org
  14. Programming Old School by John+Allsup · · Score: 4, Insightful

    Programming was done and dusted as a discipline in the sixties, got creative in the seventies and has been taking the piss ever since. New programmers need to stop learning tricks and learn to write good programs that work on minimal resources and work under strain and with no guessing games involved, just like the Space Shuttle people did, and learnt the beauty of purity that Lisp showed, the beauty of simplicity that Forth showed, and redevelop the lost art of programming. Modern day computing is ugly. [ Here ends the rant of an old school fundamentalist ;-) ]

    --
    John_Chalisque
  15. Get used to a poorly designed environment by Required+Snark · · Score: 4, Insightful
    If you started to code before the rise of the internet, you learned how to function in a somewhat useful development environment. The infrastructure and tools for internet based programming are severely broken by those standards.

    To a significant extent, all the practices that make a workable environment were abandoned for the internet. It's likely that the learning curve problem you are experiencing is a reflection how bad things have become for coders.

    Take languages. With the possible exception of Python, all the languages associated with web development have glaring flaws. PHP is conceivably the worst language to ever gain broad acceptance. JavaScript does objects wrong and has evil lexical scoping rules. You have to be very careful or you can step on an assumption made by object in a library that you don't even know was loaded.

    Thoughtful system design has been replaced by object oriented programming. The failed assumption is that if you have an object model, you must be doing a good job. This is a prime example of magical thinking. Just because it's all objects does not mean that it was done right. (I'm talking about you, Java).

    Then there are the "non-standard" standards. The poster child is HTML in the browser. To reach the full user base web pages must code for multiple incompatible implementations. Chalk up a lot of this to Microsoft, but even they had a lot of help creating the garbage dump called web standards.

    Frameworks take the mindset of spaghetti code, force it on the coder and then claim that they are really great. Take Cake/PHP. Using it is the equivalent of chewing on a mixture of crushed glass and push pins. It only seem useful if you have been swimming in the cesspit of PHP.

    To be fair, I must say that JQuery is one of the best examples of software out there. I demonstrates that even given a flawed language like JavaScript, and the snake pit of inconsistent DOM implementations, elegant and useful software is possible. It's just too bad that there are very few tools that do such a good job.

    So don't blame yourself. You are as smart and capable as you ever were, it's the work environment that has become degraded. If you come to grips with the current crop of shoddy software you can achieve your ends. A more fundamental issue is if you want to work in such a terrible situation. After having the experience of being productive, it's a real let down to experience using such a crap set of tools.

    --
    Why is Snark Required?