Ask Slashdot: How Does an IT Generalist Get Back Into Programming? 224
CanadianSchism writes "I've been in the public sector for the past 6 years. I started off doing my work study in web design and a bit of support, eventually going through the interview process to fill in a data processing technician post, and getting the job. The first four years of my work life were spent in various schools, fixing computers, implementing new hardware, rolling out updates/ghosting labs, troubleshooting basic network and printer problems, etc. I was eventually asked to work on the administrative information systems with an analyst, which I've been doing for the past 2 years. That's consisted of program support, installing updates to the pay/financial/purchasing/tax/energy systems, taking backups on SQL servers, etc. I've never had the opportunity to take time for myself, and jump back into my first love: programming. I've picked up Powershell books (have two here at the office), but haven't gotten anything down yet, as there are always other projects that come up and whittle my attention to learning a language down to zilch. This new year will see a change in that, however. I'll be setting aside an hour every day to devote to learning a new language, in the eventual hope that I can leave this company (take a sabbatical) and hop into the private sector for a few years. My question to you all is, what language should I start with, to learn and get back into the principles of programming, that will help me build a personal portfolio, but will also lend to learning other languages? At this point, I'm not sure if I'd like to make/maintain custom applications, or if back-end web programming would be more interesting, or any of the other niches out there."
set goals (Score:2)
Re: (Score:2)
Or he could use PowerShell to automate routine drudge tasks.
Re: (Score:3)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Let's be realistic though, it takes one dumbass mgr. or even sr. dev. to completely turn a beginner's job into a nightmare, esp
Re: (Score:2)
I'm not saying the senior developers are actually blowing up the database, but it does take them time and thought to write a half decent query. You can take a naive approach to the task and get something that works, but when you get a table that joins 3 others in that are anywhere between 3 million and 30 million rows you need to think your query through before you lock the entire damn database.
Entry level developers need to know this at the very least, and if you get someone in there that barely understan
Re: (Score:3)
Re: (Score:2)
Yes, to the beginner who stops the thought experiment right there it would seem like that it just cancels out,
VERBAGE! (Score:2)
Gentlemen, I've actually trained a lady under me...
HOT. Please post pics.
Re: (Score:2)
Jr level positions are for people with little to no experience... to do small tasks with oversite of a Sr. Developer.
Re: (Score:3)
Dear lord, no they are not. Yes Jr level positions are usually shadowed/mentored by some Sr level developers, but they expect you to have at least some experience. Now, obviously they don't expect you to necessarily have professional experience, otherwise no one would ever get into the field, but every software shop I have seen expects at least a few years of programming experience before they will even talk to you.
Re: (Score:3)
Most people don't start off their programming careers by writing games, eh nvm
What would you say most developers start out learning?
I have to admit that no matter what problem you're solving in programming, it can be as much of a rush as making a game, but I still think it's a good way to capture the imagination of a new programmer. It's good if your program is fun to test as well as to code. Even if it's just a basic text quiz type game, it's good to have such immediate feedback on what you're programming.
My first programming book was learning how to make games in Amos BASIC on my A
Re: (Score:2)
Re: (Score:2)
Well, I started off thinking 2D games, but then I was thinking for the absolute basics you could start off with very simple command line stuff, but you can even turn that into a game. For example a simple game where you are presented with 2 integers that the user has to add together and type in the answer. Then randomise the numbers. Put it in a loop. Then add in subtraction, multiplication and division. Keep track of how many answers the user got right or wrong. You could even add in a high score table and
Python (Score:4, Insightful)
Niche languages? (Score:2, Informative)
Progress may be slow, but going the C then C++/C# route seems to be more marketable than niche languages like Ruby, Python, or even perl.
1995 called. Your C books are in.
You might want to look up the definition of niche, cause I don't think it means what you think it means.
Re: (Score:3)
You might want to look up the definition of niche, cause I don't think it means what you think it means.
I am pretty sure he is correct in using 'niche' as a way of describing a small segment of the programming market.
Languages such as Java, C/C++, C#, PHP, and Visual Basic are FAR FAR FAR more commonly used than Ruby or Python. Those two are niche languages by almost anyone's definition.
If the marketability of your skillsets is your primary concern, learning languages like PHP, Java, Javascript, or C# is clearly the best way to go. I sure wouldn't want a language like Ruby or Python to be the only one I am
Re: (Score:2)
I think that if a language is being used to power sites like Reddit, Quora, Pintrest, Instagram, Disqus, Mozilla, and various bits of Google, it's disingenuous to call it "niche" and suggest learning C.
http://www.quora.com/Django/What-is-the-highest-traffic-website-built-on-top-of-Django [quora.com]
Re: (Score:2)
I think that if a language is being used to power sites like Reddit, Quora, Pintrest, Instagram, Disqus, Mozilla, and various bits of Google, it's disingenuous to call it "niche" and suggest learning C.
He didn't say they were bad languages (although he did provide a small criticism of Python), he just said they were niche. Since when does calling something a niche product/market/industry imply that it is inferior? Lamborghinis are definetly part of a niche market, but I sure would trade in my current mainstream car for an exotic sportscar. That said, if I was going to choose to specialize in fixing either Lamborghinis or Fords, it would probably be an easy choice.
(I am not claiming that Python or Ruby
Re: (Score:2)
I'm not saying it's good or bad, I'm just saying he is grossly misinformed if he thinks Python is a niche language. It's used by huge sites and from what I've seen has replaced Java as the language most used to teach programming.
His whole point was that you'd be better off learning C (seriously, wtf?) and then C++ than Python, and I think that's just demonstrably not true across the board. Sure, there are still lots of areas where a language like C++ is superior, but for the vast majority of people lookin
Re: (Score:2)
While it may be a good language to teach first semester programmers how to program (since it is basically a scripting language), that doesn't mean it is a very marketable skill on its own. Learning Python as your primary scripting language is a great idea, but you better be very proficient in languages that are more commonly used.
I just got home from work and pulled up monster.com to see if Python actually was more commonly used than I thought. The results in the Chicago area when searching for Python was
Re: (Score:2)
Indeed, those results seem pretty conclusive. I yield in the face of my own apparent ignorance :)
Re: (Score:2)
Indeed, those results seem pretty conclusive. I yield in the face of my own apparent ignorance :)
The funny thing is, I actually do think Python is a great language for this submitter to learn. With his skills in IT, a good gateway job into a developer position could be working for a QA department. In fact most of the Python job postings I saw were for a QA departments. And at companys that really take QA seriously, there is little difference between QA and software development.
He should start learning either Java or C# IMHO, but Python would be a good start and put him into a QA position quickly.
Re: (Score:3)
You're wrong about Python, everybody's using it these days. It's probably more common than Perl now. I would say that most scripts that would have been written in Perl and many that would have been written in Bash are now being written in Python.
Re: (Score:2)
You're wrong about Python, everybody's using it these days. It's probably more common than Perl now. I would say that most scripts that would have been written in Perl and many that would have been written in Bash are now being written in Python.
Which troglodyte in denial modded that down?
Re: (Score:2)
Not so. Ruby continues to become more popular, and is already significantly ahead of JavaScript, .NET (except C#), LISP, etc. I don't see you can call anything in TIOBE's "A" list a "niche" product.
Ruby has moved down a notch in the list since 2007, but that's just because Objective-C suddenly jumped into the A list, near the top. Other languages like PHP and .NET (again, except for C# in particular) have gone down 2 or more notches during the same period.
TIOBE's A list just means it at least still has a sizeable niche. I never said Ruby or Python were dead languages. The kinds of languages that it considers B are Ada, MATLAB, and Assembly, among others. And if you rightfully ignore the A status and look at its actual rating of 1.7, you can see that even TIOBE regards Ruby as a niche language. I don't know how you can look at that rating and come to any other conclusion. But I think TIOBE's ratings are usually a bit odd (Javascript and C# being so low i
Re: (Score:2)
" But I think TIOBE's ratings are usually a bit odd (Javascript and C# being so low is astounding), so I wouldn't necessarily use this low rating to prove my point either."
Having been in the industry for many years, I do not find their placement of JavaScript or C# odd at all.
.NET, for example, which is below Ruby in the list, is not a "niche" language either, since it can be used for creating general-purpose desktop apps or web pages or services, as the programmer d
However, if you want to look at other sources, see that other poster's comment with all the links in it. Many of those sources rank Ruby higher than the TIOBE Index does.
Regardless, I disagree. Visual Basic
Re: (Score:2)
As someone else pointed out (see the post with all the links), several other respected industry sources also say that Ruby is up in popularity, and some of them rank it as high as #5.
Re: (Score:2)
C is a great language, but not nearly as friendly as Python. And Python doesn't have "whitespace issues" unless you're a moron or use a terrible editor. Lack of curly braces doesn't make a language immatu
Re: (Score:2)
Last time I looked for jobs, it was full of Java and C#.
Re: (Score:2)
"Last time I looked for jobs, it was full of Java and C#."
That's because during much of the last decade, Java and C# were among the languages in high demand. Which establishes a code base, which then has to be upgraded and maintained. And as you probably know, there is generally more work overall in upgrading and maintenance than there is in writing novel code.
However, that is no indication whatever that very much new is being done with Java or C#. Something to keep in mind.
During that time, languages like Python and (in just the last 5 years or so, which is
Re: (Score:2)
Re: (Score:2)
there are still loads of companies looking for developers that can write C# and ASP
Why is it that whenever I hit a .asp page on the net I know I am in for an eye-gouging, mind-numbing experience?
Re: (Score:2)
If you paid attention to the context, I read ASP as ASP.NET, not classic ASP.
Re: (Score:2)
Is it just my imagination, or are .asp sites blessedly becoming rarer? This [dmxready.com] site's spin on it is hilarious: "As mentioned above, programmers have moved away from Classic ASP and VBScript to other languages. However, that is not quite the same as dying". News for you! Oh yes it is. And do I even need to comment on the bad taste of trying to distribute this spin via pdf? Especially, DRM protected pdf? Say, this idiocy would not have anything to do with .asp dying would it?
Re: (Score:2)
For me, I do a hell of a lot of FOSS code (Score:5, Interesting)
I do it for free; usually for NPOs that can't afford programmers. Helps me to learn.
I don't particularly care whether or not it ever becomes "famous" (it won't because it addresses a very small, select audience). I just care whether or not it is the best quality I can do.
The nice thing, is that there is minimal pressure, which is good, as my "day job" gets first dibs on my time.
I don't watch TV. I don't hunt. I don't tweak cars, and I don't like to spend much time tending a server.
I just like to code. I also make sure that I don't write stuff that competes with my "day job." I like my company, and they could easily make my life miserable if I did. I also don't spend much of my "day job's" time on my personal stuff. I don't mind spending a bit of it, though, as they DEFINITELY benefit from my extracurricular work.
That works for me.
Re: (Score:2)
I also don't spend much of my "day job's" time on my personal stuff. I don't mind spending a bit of it, though, as they DEFINITELY benefit from my extracurricular work.
Just don't ever let the company lawyer see that post...
Re: (Score:2)
Re: (Score:3)
Didn't you read what I wrote?
The nature of my job doesn't allow me to do anything more than a quick check to see if the site is visible through a firewall. Since everything at work is monitored and controlled up the yin-yang, it's actually impossible to do more than that.
Let me break it into smal, easy-to-comprehend words:
Python (Score:5, Interesting)
Re: (Score:2)
Agreed. I've used a fair chunk of languages and you can learn from each of them (although sometimes what you learn is 'don't do things this way', I'm looking at your early versions of Visual Basic and all versions of brainfuck (i still prefer brainfuck to VB though). Python isn't perfect and it isn't for everyone (some people get real grumpy about meaningful white space), but if you haven't programmed before then it is a good place to start. If not python then something designed with teaching in mind, say P
Re: (Score:2)
Make a Project (Score:3)
Pick something you love, or an itch you're dying to scratch. If it's a passion you'll stick with it.
Then pick a language that fits the niche that you're working in. If you're gluing unix bits together that's one thing, if you're going to be pushing out a big web app, that's another, and if you're making meatspace things go "Bing" then that's a third.
As you said, an hour a day is a great way to get yourself to be serious about it.
Python... (Score:3, Insightful)
Re:Python... (Score:4, Insightful)
I guess you never used Pascal, eh?
Over the years, I've programmed Pascal, FORTRAN, BASIC, PL/I, C, C++, Ruby, Python, Machine Code, ASM, PHP, JavaScript, HTML, XSLT, etc.
My longest-term language was C++ (over 20 years), but I now mostly do PHP (Server-side) and JavaScript and Objective-C (client-side).
ObjC was weird to learn (not as weird as XSLT, though), after C++, but I've got the hang of it.
Language (to me) is almost irrelevant. I can learn a new language to a useful level in a couple of weeks.
However, what takes the time, is the framework/SDK/API. That can take years to master.
Scripting languages (like PHP and Python) rely on enormous libraries. These can take a long time to learn, and learn well. They also tend to be moving targets.
Re: (Score:2)
How is Python "pedantic"? Because you can just dump out unreadable gibberish without bother to format your code in any sensible way? Because that seems to be the main complaint from those who dislike Python. This is also why I think it's a good language for beginners, better to have them learn right away how to use indentation and proper code formatting than have to deal with their unreadable code several years down the line (and boy have I seen some unreadable code by developers who, for some reason, never
Stay in the IT Discipline....go DevOps (Score:5, Interesting)
You can become a rockstar DevOps Sysadmin if you get this down
I'd suggest Ruby first, then Python...but of course, you'll want to make sure your Linux/unix sysadmin knowledge is top notch too. I'm self taught so I'm not very good at telling people how to learn it besides "eh figure it out", but I'm sure you are industrious enough :)
In conclusion: Stick with IT. Also add Programming. Collect $$ for being a DevOps specialist.
Re: (Score:3)
Then, you will learn to get your skill level and job title up to that of "Systems Engineer", and then maybe "Senior Systems Engineer." During this time, you'll learn a lot more about tech, get out of just hardware/application support, and get exposed to lots of projects.
You will be sent work that
FPGAs (Score:2)
2. Learn Verilog [fpga4fun.com]
3. Live on the bleeding edge between hardware and software. Dream of being a hardware guy that dreams of being a butterfly in the software world, and vice versa.
4.
5. Get chicks
6. Profit!
Re:FPGAs (Score:4, Funny)
Hardware guys are indeed the most likely ones to get chicks in the IT world.
Must be all that silicon.
Re: (Score:2)
silicon != silicone
What do you care about? (Score:2)
I find it hard to learn dense material (specific kinds of math, etc.) unless I care about the problem that needs to be solved.
So how about trying to find (or start) some project which develops an app you'd like to use?
HTML/CSS/PHP (Score:3)
Just do it... (Score:3)
Sounds simple but that's really all there is to it. Pick a language with a good support community and dive in. Python is a good choice because of it's versatility and support. Perl is still around and is a great scripting language. The important thing is pick something and stick to it. I've seen so many people with bookshelves full of programming books and they never got to the end of any of them. Professional dabblers. It's better to pick one or two languages and really know them well than to dabble in lots of them without any real expertise. Once you do that then picking up new languages will be easier because the core concepts will be familiar to you.
I used to work in the public sector so I'll share something with you. There is a stigma attached to being a public sector employee. I've been told this by more than one recruiter. It's a great training ground but at some point you have to make up your mind whether you want to stay there your whole career or venture into the private sector. The longer you stay the harder it will be to get out. Some recruiters will look at someone with 10-15 years of public sector experience and be reluctant to hire you for a private sector job. I met some smart people in public sector but I also met more than my share of lazy pricks. You sound like one of the former so just make the right choice for you. Good luck :-)
PHP (Score:2)
programming (Score:3)
The current learning language for Computer Science is Java. It used to be Pascal. Switched to Java because of the importance of object oriented programming.
The language of choice for Linux/Unix system administration is Perl. Windows admins don't generally code though one of the dot-net's would likely be the choice if they did.
Pick one. Then buy a book and work through writing and running the example code. Then come up with an idea for a simple program you want to write. Then write it, referencing your books and Google search.
Re: (Score:2)
I think VB has moved out of the red-headed stepchild category at this point.
Re: (Score:2)
PowerShell is what a Windows IT admin would be using these days.
I would recommend Java or C# for the questioner. Both are easy to find work in.
Re: (Score:2)
Re: (Score:2)
It's been a while since Perl was The language used by sysadmins. It's still around, sure. But shell scripts never really went away and Python has been growing steadily as well.
Start with the classics! (Score:2)
C and/or C++ will get you further than any other "modern" language.
Join an open source project that strikes your fancy, or find a niche and start your own.
Re: (Score:2)
Probably won't get you a job though. The relatively few C/C++ jobs will be filled by experienced people.
Programmers code every day (Score:5, Insightful)
It's been my experiance that good programmers always have a project in the works. It's almost a disease. I can't go 2 weeks without writing something. So if you've gone 6 years without writing anything, I've got to wonder if it's really your thing.
That said, the next question is where to start. Pick something with high demand where it's relatively easy to get your foot in the door. The biggest problem you'll encounter is that everyone wants 5 years of experiance. If you can work programming into your current job, great. That's how I switch from systems administration to programming. I'd recommend learning C# and MVC. The tools are excellent and there's huge demand for it right now. The HTML and Javascript side of it will translate over to anything else you want to do.
Re: (Score:2)
Of course programmers code every day, it's their job.
Re:Programmers code every day (Score:5, Insightful)
Re: (Score:2)
Again, what he's saying is that if you really love it, you would be doing it instead of asking on Slashdot how to do it.
The other day my wife needed to turn an image into a PDF file. Not finding something that did it for free in the past, I wrote it myself. Another time I wrote a utility that split PDF files. And another time one that joined them together. With a little help, I got my wife setup to manage PDFs without paying a dime. All with stuff I wrote for fun when needed. (I really should merge th
Re:Programmers code every day (Score:5, Insightful)
It seems like you are missing the OP's point. Good programmers code all the time *regardless* of whether the nature of their job lends time to it. They *do* jump into it in their off-time.
The fact that you haven't is a strong indicator that programming is not for you.
Re: (Score:2)
What others are saying matches what I think... (programmers do it for fun, and never stop coming up with programming ideas... even scripting for games)
What I think is missing from the discussion is what was the programming you were doing before IT took over your life? Did you ever really get going on a project?
I can totally see it being the case that you enjoyed the bits of programming you were taught, but never stumbled onto the right set of tools... Namely, if I see something I want to accomplish, I'm con
Go to school (Score:2)
There are still plenty of positions available without one, but if you're thinking about a career in development you should give this a lot of consideration.
Re: (Score:3)
The best answer is: whatever drives you (Score:2)
If you want to be a web developer, learn HTML, CSS, JavaScript, a web backend language, and SQL. If you want to do sysadmin type stuff, learn a scripting language or three (PowerScript, Python, Perl, UNIX shell scripts (ick!)). If you want to get into heavier programming, pick up languages used in the direction you want to head; that might be a scripting language or it might be a "real" programming language.
If you can, work your programming skills in to your current job. It's much easier to get a job progra
Repost aint it? (Score:2)
My two cents (Score:3)
Your type largely determines your approach to learning... anything, especially something more complicated like programming. I'm a kinesthetic & how I've picked up new computer concepts and programming languages either by jumping right into them (work related and situational mostly), or by reading a book and doing the examples. I'm dead serious, it's that simple (+/- motivation), read the chapter, put what you learned into a compiler, debug it (if you need to), play with it, try new methods, whatever... I picked up jquery & ajax mostly this way, the latter mostly through implementing on business systems, the former I read a "missing manual" series book on.
If you're feeling cocky, you can fake it till you make it, land a beginner programming job and get paid to learn it! I know it would work for me, but that's largely cause I'm a hands on learner (kinesthetic) and I learn by doing. If you're an auditory learner, you'd probably get chased out with fire with this kind of approach and would benefit more from online, or class lectures.
Re: (Score:3)
Learning styles have been shown to be irrelevant: see Pashler, H.; McDaniel, M.; Rohrer, D.; Bjork, R. (2008). "Learning styles: Concepts and evidence". Psychological Science in the Public Interest 9: 105–119.
Note that they don't say that learning styles "don't exist", just that whether they exist or not, nobody has been able to demonstrably improve teaching or learning by conscious application of learning styles.
Good teaching is better for everybody, regardless of learning "style".
Before choosing this programming language or that (Score:3, Insightful)
Instead of following the pattern on here of recommending this programming language or that, I'll suggest a different course.
First, choose a very specific field of work. Video games, insurance, pinnipeds, ASIC design... something.
Second, look at the development technologies and tools that exist in that field and are used frequently and common. Games use C++ and assembly, ASICs use Verilog, pinniped databases are written in .NET.
Third, focus on learning the technologies that are used in your particular field of interest.
This will permit you to have a marketable skill in precisely the area of programming you want to accomplish.
I am aware that many programmers consider themselves "generalists" -- and heck, I do too. But the field of programming is now sufficiently wide that ALL programmers must, to an extent, specialize. Of course you can always apply your generalist knowledge to solving one-off problems. Instead, I suggest you focus on a particular area of expertise related to your dream job.
Best of luck.
Don't (Score:3)
Seriously - It's better as a generalist. Or do you really want to swap having a new problem every day to having the same one for years?
Not Enough Time (Score:2)
Decide "what" THEN "how" (Score:2)
My question to you all is, what language should I start with, to learn and get back into the principles of programming, that will help me build a personal portfolio, but will also lend to learning other languages? At this point, I'm not sure if I'd like to make/maintain custom applications, or if back-end web programming would be more interesting, or any of the other niches out there."
Several languages are good and refreshing the basic principles of programming and as stepping-stones to learning other languages. If you need a list, just ask several high school or college CS department what languages they teach as 1st and 2nd languages.
You narrowed things down by saying you want to build a portfolio. What kinds of projects do you want in that portfolio? You don't seem to have decided yet.
Once you decide, that will be a major factor in choosing your language. You'll want to pick a lang
Seven Languages in Seven Weeks (Score:5, Insightful)
By and large, languages don't matter. It's the frameworks that do. Nobody* is looking for a ruby programmer - they're looking for a ruby on rails programmer. Nobody is looking for an Objective-C programmer - they're looking for iOS (and/or MacApps) programmers.
* yes, there probably are 3 ruby jobs, but you don't qualify and they are not near you/flexible enough/whatever.
I don't happen to like Java. I found python annoying when I last tried it (which was long ago). I think I'd like it more, now. php was meh. I really enjoy ruby and I liked Obj-C 15 years ago. Find out what you like to work with.
Check out the Seven Languages book. It's fun to take a few languages for a spin. If it's not fun for you, maybe you should stick with IT :-)
But you're really asking about finding a job.
By and large, jobs don't matter. Yes, you need/want to make enough to live comfortably, but it's amazing what you can be comfortable with. What really matters is what you work on, who you work with, and what you work with. Find a job in a field that interests you, working for/with folks that you get along with. Once you're there, fix the kinds of problems you enjoy fixing. Do some of the ones that need fixing, too. You do both software and IT - it should not be hard to find a great place to work and make it work for you.
Me, 6 years ago. (Score:2)
2.) Something that's popular and not a niche language.
3.) Something that's platform independent.
I asked myself the same question several years ago. Because I was a hard care Unix admin at the time, I picked C# and DirectX development. I wanted something "easier" than my 50 hour a week job and different enough that I did not get sick of it. Also, I remembered Visual Basic from college and it was fun. I wrote about 40% of a pretty impressive game, all while teaching my
Re: (Score:2)
Oh, you too? :D
Seriously though, the cool thing about making a game, creative app or random "effects" is that you're totally free to experiment, while still learning a LOT, especially the higher you aim. Making a simple game or a starfield is easy, but there is just no ceiling to that stuff; while there are usually limits to how crazy you can get with "serious" apps etc.
JavaScript (Score:2)
Be seen or provable (Score:2)
user groups, open source (Score:2)
College (Score:4, Interesting)
Do you have a Bachelor's degree? I began working as a systems administrator before completing my Bachelor's degree. I have always done some amateur programming, but wanted to improve my skills to where I really was a "programmer". So I killed two birds with one stone and started taking one course a semester at a local college. I would go either at night, or on the weekend. Some semesters I took more than one course.
As I said, I already had written programs. I did not have the deeper understanding to write better, bigger and more complex programs though. The computer science program laid a foundation of calculus, statistics, and discrete mathematics. Then it went deeper into graph theory, and the theory of computation. Then we began learning C++. Then we learned more advanced C++, how algorithms and recursion and so forth worked. Then we learned Java. Then we learned about data structures, and the relationship between data structures and algorithms.
If you just want to learn a little Perl to write some simple scripts, you don't need to do all of this. It sounds like you want to have a deeper understanding of programming though. So this is necessary. I think it is best done at a college, although theoretically someone can learn much of this on their own.
I think the idea of learning programming by "I want to learn one language well" is an amateur mistake. Our learning initially was almost purely mathematical. If you read volume I of "The Art of Computer Programming", he doesn't get into (M)MIX programming until pretty far into the book, the beginning is math. The cursory learning of a programming language was just a byway to then teach us about recursion, backtracking and the like. We immediately moved onto Java instead of going deeper into C++, to see that there were different ways of doing programming by different languages. We later learned radically different languages using different paradigms like logical programming (Prolog), functional programming (Lisp) on top of the object-oriented programming (C++, Java) languages we had already learned.
Eric Raymond once said "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." Other experienced programmers have agreed with this sentiment. As you said you're still an amateur, it's probably beyond your capacity right now to understand why someone should "waste time" learning a language like Scheme Lisp which they might end up never using. An ounce of prevention is worth a pound of cure though. The opinion of most expert programmers is that understanding the core ideas of computer science and programming is more important than domain expertise in a particular language. You say "I'll be setting aside an hour every day to devote to learning a new language, in the eventual hope that I can leave this company (take a sabbatical) and hop into the private sector for a few years." You should ask yourself if this is enough. Yes, knowing at least one commonly used programming language is important to get a job as a programmer. You will never really understand that language, and its limitations and advantages, until you learn some other languages, and some of the general concepts behind all programming and computer science. You said you were a novice programmer, and I think putting too much emphasis on learning one language well is an amateur mistake. There's a lot of steps you should be doing before deciding to become an expert in one language.
I'll give a personal example. I do a lot of Android (Java-like) programming. I also need a web API for some of the programs. A server-side Java solution is just too expensive for what I'm doing - sites like Bluehost and Dreamhost don't really support Tomcat and the like for $9 a month. So I use other languages for my web API than Java. Do a Google, or more importantly, a Craigslist job search for "full s
Avoid Perl (Score:2)
If you learn Perl, you will rapidly lose all interest in other languages, because any time you try to pick one of them up, you'll be reading through the documentation and examples, and your brain will go, "All THAT just to accomplish THAT little thing? That's, like, eighty lines, and in Perl it would be, like, three lines. I'm gonna just go do it in Perl. Yep, see? Three lines, like I said.
Re: (Score:2)
Read "Programming Pearls" (Score:2)
This book teaches you to think like an experienced programmer.
It's a great way of refreshing your algorithm skills and an easy ready compared to other (heavier) algorithm books.
Some advice from someone in a similar situation... (Score:2)
Just don't jump into projects involving involving the technologies (i.e. platforms and tools) of the now. The number of subjects you have to "learn" about are so fragmented it's an utter nightmare. You'll get lost, feel incompetent, and give up; I've seen it a hundred times. What you are going to do is reinforce and awaken your incommunicable knowledge of programming fundamentals; not in a formal, theoretical way, not with simple practice (though consistent routine is required to turn this into a habit agai
A dirty little secret (Score:2)
The dirty little secret of the programming world is that the vast majority of jobs aren't really all that different than what you're doing now. Sure a few folks work in C on the bare metal, and a few people do some really high level stuff for companies like Google or Microsoft, but the vast majority of people working as programmers are making LoB apps used by maybe a few hundred people accessing a dozen or so tables from either an existing LoB system or a custom database. For the most part these apps are ac
Re:simple (Score:5, Informative)
Yep. Ain't no other way. Write stuff.
Even better, write stuff that's hard. Read stuff. Read really complicated stuff, and try to make it do other stuff. Nothing will teach you good programming practices like knowing why you follow them, and nothing will tell you why like seeing the hell that comes of not following them, which any large project is almost guaranteed to contain plenty of examples of. From misnamed or misused variable/functions, to multiple (and therefore slowly diverging) implementations of the same logic, to spending weeks reinventing something already solved in your programming language's standard library because they didn't like the order of arguments on a function, to bringing in a massive overcomplicated framework to solve a simple problem due to a too-strong avoidance of NIH (not that you shouldn't beware of NIH, you just shouldn't let it lead you into trying to pound a space shuttle into a square hole), you'll see it all.
Fix some bugs for a large FOSS project. Pick things that are just slightly over your head, and then pretend someone's breathing down your neck to get it done yesterday. Pick a project where you don't just get to commit changes, find something where your code is reviewed before it's accepted. You'll find a lot of honesty in people that aren't getting paid and don't give a shit about alienating you, and if you can handle a bruised ego you'll learn a lot.
One thing I wouldn't suggest doing is writing code for other people on your own, not right away. It's not that you shouldn't do that eventually, just don't do it when you care more about accomplishing your goal than you do about learning until you've got some good habits firmly established. Otherwise, your bad habits will just become reinforced, since they're usually easier especially when you're only looking at your own code, and to to be honest, you probably don't know the difference between a good habit and a bad habit until you've worked on a large project with a lot of people.
The best thing about working on FOSS projects is, you'll actually be able to demonstrate work to future employers. That goes a long way in an interview or on a resume.
Re: (Score:2)
The question was what language to learn. Before working on FOSS code, you should choose a language.
Java does a decent job at teaching the kinds of things you might need to know, and it's applicable to web, desktop, and mobile platforms. Lots of people knock it - I hate it, even though I did adopt a Java FOSS app.
I would recommend C# 4, which is good for servers as well as desktop, and with a bit of help from Mono can work on Linux. A serious Fortune 500 job is probably going to involve C#, and getting us
Re: (Score:2)
But ya, I remember folks in college wanting to become programmers and just not being able to adapt their style of thinking to it. I'm curious as to what makes a programmer a programmer, book smarts have a lot to do with it, but there's plenty of people out there that have failed at coding and succeeded at something else. Critical thinking is a part of it too, but it's almost like you have to tailor your thoughts a certain way to
Re: (Score:2)
http://www.personalitypage.com/high-level.html [personalitypage.com]
I'd say INTJ and INTP
Re: (Score:2)
Re: (Score:2)
There's a reason programmers - even marginally competent ones - are paid well above $100/hour on contract.
I thought the reason was that they are individual contractors, not employees, so that they are responsible not only for income taxes, but self-employment tax, their own health insurance, their own retirement and any other "benefits." But then, I could be wrong. I'd also question that above $100/hour figure, at least in the midwest portion of the US. $60/hour seems more like it (which is nothing to scoff at, but after withholding all of the things mentioned above, it isn't a lucrative as it sounds).
Re:hour-a-day doesn't work (Score:4, Informative)
Actually, the hourly rate and what a contractor makes depends on a lot of factors. I've contracted a lot ( almost 10 gigs in my career ) as an LCC, Sub Chapter-S corp and as a W-2 Employee ) and basically:
1. You can setup a sub-chapter S corp and work for a company as another corporation.
2. You can just do 1099 self-employeed as sole-propritor, LLC or partnership if you have others involved.
3. You can work through a contracting company as their "employee" where they pull out the FICA, Social Security, etc and provide benefits at a cost to you and you get billed at X dollars an hour and get paid X - Y dollars an hour ( Y being the contracting companies cut ).
There are probably other options I don't know about.
So when someone says 100 bucks an hour, it doesn't mean much until you look at HOW they are earning 100 bucks an hour: W-2 or Independent as S-Corp, self-employed, etc , how they are filing their taxes, what expenses and other deductions they are taking, etc. In fact, I would say that at least in my experience I actually earned more of the rate as a sub-chapter S then any other way. Its just some extra work to keep track of all the expenses, run your own payroll, pay estimated taxes, file taxes and make sure you take all the deductions for the right expenses, etc.
Also rates depend very much on skills and demand. 100 dollars an hour is not that unrealistic. SAP and other ERP software packages and specialists can easily go over 100 an hour even being paid as a W-2 employee no matter where you are.
On the other hand, if a programming language or skill is "saturated" with a lot of programmers and the supply of talent exceeds the demand, rates drop like bricks. This seemed to happen with Java a few years back. I had some people calling me offering 30-40 bucks an hour for Java. I either ignored or laughed at most of them. Thankfully Java rates seem to be going up again, although I'm not doing much Java these days so I can't comment on what the going rates are for Java right now.
But the previous post was right. You have to "live" it. Even when I take time off between jobs, I spend some time reading technical books, checking out new languages, and writing code to keep my skills current. An hour a day probably isn't enough to learn a new language.