Stuck in a skills rut...

Discussion in 'Mac Programming' started by ptaylor9, May 5, 2010.

  1. ptaylor9 macrumors member

    Sep 16, 2009
    Hi All,
    I finished my bachelors degree about 6 years ago, and for the past 5 years I have been working at my current company as a windows programmer (though I switched to mac at home about 6 months ago).
    I realised browsing through this forum the other day that I am starting to get stuck in a skills rut. I use the same language day in day out, and while the programs I am writing are pretty much running the company (it's all internal systems), I can't help but feel like even some of the old theory is slowly leaking out of my brain heh.
    As such, I have decided to go back and relearn C/C++ with the intention of moving on to objective-c and cocoa, to get another language under my belt, and have ordered what seem to be the most recommended books on here for doing so:
    Book 1 and Book2
    but I could really do with a decent book for going back to the theory of programming.
    Don't get me wrong, when my boss comes to me and says I need a system to do this, I can do it, but it sometimes feel like I am just doing everything automatically now, and I am thirsting for knowledge again!
    If you guys have any recmmendations, I would appreciate it.
    Anyone else gone through this stage?
  2. ranguvar macrumors 6502

    Sep 18, 2009
  3. pilotError macrumors 68020


    Apr 12, 2006
    Long Island
    find a job that does more than


    Join an open source project as a contributor. Even if you spend the time to learn, you'll never retain it if you don't use it.
  4. lee1210 macrumors 68040


    Jan 10, 2005
    Dallas, TX
    While your idea for pursuing OS X development may be personally rewarding, if your goal is really broadening your horizons I'd recommend functional programming instead. Try erlang, lisp, or Haskell. Changing the way you think about problems, how to break things down into recursive and base cases, etc. will make you better at problem solving in general. I think C should be in everyone's arsenal, so do that, too. But it's another iterative language, so I don't know that you'll get as many "Ah-ha!" moments.

    Are you the senior-most technical employee at your current company? If so you may be able to transition things from to C#, which will be more attractive to future employees, and would let you do something new while maintaining compatibility with existing code (at least that's the way I understand .net).

    Good luck in whatever endeavor you choose.

  5. ptaylor9 thread starter macrumors member

    Sep 16, 2009
    Yeah, thought about doing this, need to find the money to do it really, not the cheapest thing in the world to do...

    Some good advice there, I like idea of the other langauge styles.
    I loved learning all this stuff at uni, it probably helped having such a structured syllabus to work through, to keep me going in the right direction.
    I am the most senior programmer here, which is one of the reasons I feel I need to stay ahead of the game a bit more than I have been doing.

    Thanks for the replies guys, hopefully I can put a bit of this self doubt to good use!
  6. jpyc7 macrumors 6502

    Mar 8, 2009
    Denver, CO
    I think the suggestion of learning a functional programming language is a good one, even if it isn't directly applicable to your employer.

    Some other ideas:
    Even if you've learned lots of things in school, you might not use all of these in a production environment. I don't know how many of these apply to Windows programming.
    1. Use multithreading in your program.
    2.Create a multi-process program that uses IPC (inter-process communication). If you already use IPC, use a new IPC mechanism (unix socket instead of network socket, shared memory instead of queue).
    3. Use a database. If you already use a SQL database, try an object-oriented database. If you don't use some database features like transactions, stored procedures, foreign key constraints, etc. then try those.

    A more general thing is to expand your problem domain into "harder problems" that will need more advanced techniques. It kind of depends on your business. If you aren't already using statistics, a relatively easy thing is calculate statistical measures that are available via libraries to get mean, covariance, standard deviation, etc. Tougher math things could involve transforms (fourier, wavelet) which convert one way of looking at something into a different way. There are probably lots of algorithms you learned in school which you've never used in your job.

    You'll have to convince your 'customers' in the worth of a given project. I'm also working for internal customers, but we get fairly wide latitude in choosing the platforms/technologies to use. It is easy to keep re-using the same stuff though.
  7. Bill McEnaney macrumors 6502

    Apr 29, 2010
    I've always enjoyed reading Dijkstra's sarcastic comments about programming languages he hated. Sadly, I got paid to program in Cobol, the only programming language I've despised even more than I despise C.

    Long ago, I helped a former coworker who needed to program in Pascal when he was earning a Master's degree in Computer Science. As you may already know, in Cobol, each variable is global. In that language, you can pass arguments only to separate programs called "subroutines."

    However hard my former coworker tried, he just couldn't grasp block structuring that any Pascal programmer needs to understand. I suspect it confused him because he spent many years programming in only one programming language, Cobol, where there's no block structure.

    I can write in about eleven programming languages. Still, now after many years writing in ISO Standard Pascal, I use it when I need to finish a program in a hurry. For me, some other languages are also easy to write in. On the other hand, I'm afraid that, had I kept programming in Cobol, I would have had the same kind of trouble my ex-colleague had with Pascal. Cobol language had "wired his brain." So he struggled to reason in another programming language.

    I agree with Lee: It's a good idea to try functional languages. They're elegant, and it's often a snap to translate a specification into an astoundingly short functional program. To see what I mean, please read my post about Haskell. In C++, a quicksort takes up about 25 lines. In the article I posted, the Haskell quicksort program is four lines long. You can shrink it to only two lines if you call the filter function on the Haskell program's second line.

    By the way, since I mentioned an IBM 370, you may wonder how old I am. Hint: I'm about five months older than President Obama. Luckily, though, many tell me that I look as if I'm in my 30s. How do I do that? I avoid the sun. The only tan I care about is a publishing company, TAN Books and Publishers, Inc, and "TAN" is short for "Thomas A. Nelson. " :D

Share This Page