Ask Slashdot: How Does an IT Generalist Get Back Into Programming?
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."
You won't be dong it for a living anytime soon, but you could at least do something fun and personal. Try writing a game or app for Android. You can cover a lot of ground in an environment that is easy to use like that.
while(1) attack(People.Sandy);
It's easy, it's fun, and it's versatile. It would be useful to all of the field you mentioned and would also be useful for scripting if you do end up going back to IT.
Apparently wizard is not a legitimate career path, so I chose programmer instead.
By programming.
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.
"For every complex problem there is an answer that is clear, simple, and wrong."
-H. L. Mencken
http://xkcd.com/353/ Results may vary but yes it is that simple and powerful.
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.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
Take a look at this Google Python Class video: it will get you immediately up & running: http://www.youtube.com/watch?v=tKTZoB2Vjuk
SeqBox
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.
It all depends one what "type" of applications you want to code for which operating systems and platforms and where you want to go career wise.
First you might want to install Postgres, MySQL, the free development version or Oracle, etc and really learn SQL and database concepts well because almost any language or tool you learn today will be accessing a database most, if not all of the time.
Second, figure out what kind of app coding you want to do.
If you want to do internet websites, maybe look at Ruby/Rails or Java with Spring Roo or one of the other frameworks.
If you are looking more for a corporate job working with business logic and back end stuff running on Unix/Linux or other servers then maybe explore Java and the Enterprise Java Beans framework, JMS, Java Mail, etc. If you really want a challenge, look at C++
If you want to do mobile phone/table apps, look into installing and downloading Xcode on a Mac and doing some iOS Apps using Cocoa/Objective C. Or do Android if that's what you prefer.
If you want to do more Windows/SQL Server GUI work and code Windows apps, then maybe look at Visual Studio and C#.
Jump right into programming with a text editor and browser with JavaScript. No compile time, simple to write basic stuff.
Later as you start to get it, research the proper ways to do thing. Don't start worrying about 'proper' form initially unless u wanna go back to college. Just hack stuff for entertainment with only an hour a day you could do some stuff.
Also check out jQuery. Powerful and effective JavaScript library.
JavaScript is everywhere these days it's good to know and based on the sheer demand for it (even entry level) you may be able to work your way toward some UX gigs. If sys admin stuff is more your thing, get some js chops and try node.js
Oppiset, if you have a tolerance for learning curves and a Mac, objective-c and that whole ecosystem is worth a look.
Adderall and codeacademy.com.
How does an IT Programmer become a General?
Although you know yourself, I've found that attempting to program for an hour a day doesn't work. There's a reason programmers - even marginally competent ones - are paid well above $100/hour on contract. Learning to program is hard. You need to dedicate chunks of time to programming, like 5 or 6 hours in one go, in a week. It's also hard to remember what you're doing if there are 6 days between your programming days. If this is all the time you have, don't curse yourself if you don't get to proficiency. You wouldn't expect to learn being an engine repair mechanic in one hour a day, because most interesting repair tasks take a few hours. This is the nature of the thing, not your fault. I'll give you an example. I was trying to place irregular stones in a path, and I had all the sizes of the stones, and I wanted to find the optimal placement. I did it by eye but didn't think the result was optimal, but couldn't find a better solution. I stopped my gardening task and wrote a program. I hadn't programmed in python for a year, so I had to dust off my knowledge, then wrote the program a couple of different ways, and used a method of config files I hadn't used before. The task took about 3 hours by the time I was done, and I found that my initial eyeball solution was optimal (but now I knew) - and I'm a lifetime programmer of just about every language. Instead, set your goals lower - expect to write a few nice scripts for your own fun. _make it fun_. Consider automating tasks you would do in your everyday work, and write the automation on the weekend - like if you're taking backups, what does an rsync script look like that emails you when it's done, or does more copies in parallel, or whatever you can think of?
C#
If you are good with LINQ and Entity Framework and AppFabric, then you'll be quite useful. And if you want to get some specialty that isn't too common and in good demand, pick up learning BizTalk.
Smash your thumb, and translate what comes out of your mouth into PERL.
1. Get an FPGA devkit
2. Learn Verilog
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!
Escher was the first MC and Giger invented the HR department.
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?
I was in a similar situation a few years ago. After working various IT positions for the past 15 years, it wasn't till about 4 years ago I decided to get involved with web development. I picked up a book from O'Reilly called "Head First in to PHP and MYSQL" which taught me an incredible amount of web fundamentals and seemed to have been geared towards people that already have a background in technology. Without meaning to give them a free plug, I really appreciate the "Head First" series of books that O'Reilly publishes. They are definitely fun and exciting. Not just for PHP and MySQL, but tons of other languages like Python, C#, Java, and more. I thought I was a lost cause when it comes to programming thanks to only having minor experience in HTML and QBASIC hehe. Needless to say, it definitely got me interested in programming again. Worked for me. Might work for you too.
*plays the Apogee theme song music*
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. Classic procedural programming, object-oriented programming, & (as of PHP 5.3) functional programming...it's got it all. In addition, the syntax is very C-like, so making the transition to other popular languages such as C/C++, Java, C#, and Javascript isn't too difficult. Also, the documentation for PHP is very good (http://php.net/docs.php).
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.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
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.
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.
One of the big changes I've seen in the past few years is the gradual disappearance of "or related work experience" in job requirements. A lot of positions now require a BS.
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.
Literalism isn't a form of humor, it's you being irritating.
OOP: C++ or java or both. scripting: python or perl or javascript. This will no doubt change in the future, but I believe those are the best languages to know. Also I would focus on the open source alternatives (gcc, make, eclipse, linux, apache, mysql, etc) as it is cheaper to learn and eventually use. Once you know them it is not hard to transition to Microsoft stuff although you may not want to. Also, if you are going to learn C++ (which I highly recommend as it gives you a good understanding of a lot of insight into the inner workings of computing in general), I would probably learn some kind of platform independent SDK like QT.
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 programming if you've been programming at a job. If not, I'd suggest getting involved with a FOSS project of some sort. Experience on the resume is a huge plus; doing a project for yourself on your spare time not so much.
Whatever you do, pick something that you can get "in to"; you'll be happier in the long run if whatever you learn is what you want to be doing. I'm at a programming job now, coming from systems administration; I got there because I was always working for software development companies, and I had to write a lot of scripts and more involved bits and pieces of code. I finally made the leap when I found a programming job that addressed a topic I was passionate about.
Good luck.
Let us live so that when we come to die, even the undertaker will be sorry -- Mark Twain
I've been lurking in /. for years, and I'm absolutely certain that this topic is nearly, if not exactly, word-for-word identical to another /. post from either last year or the year before.
A lot of coders I know will badmouth higher education til the cows come home, but I was in a similar situation to yours after a decade in IT.
A BSCS and a MSCS later I'm starting my 4th year of a very nice software engineering job. A job that required an education to get a callback for an interview. And not for nothing, but I had 3 solid job offers coming out of school despite being in the middle of an economic downturn.
First of all, I feel like I'm wasting my time writing this because I have no idea what kind of learner you are.
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.
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.
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?
At 1 hour a day you might be competent programmer in 10 years. You'll need to spend HOURS per day, assuming you don't have some type of practical background in programming already.
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 language that many or most people doing this kind of work use for this task. To put it another way: You want to have the tools to join an existing team or project with a minimum risk of lack of knowing a specific language handicapping you.
By the way, for many "types" of programming (e.g. "back-end web programming," it's not just the language but the whole development ecosystem that you need to be familiar with before you go market your skills.
If you can show a potential client
Here's what I did using [very popular development environment for the task at hand] and oh by the way I am also familiar with [another popular development environment for the same task] and [a third] and, just to round things out, I've written some small bits of code to do [something in a completely different problem area] using [a popular development environment for that problem area, preferably not one of the ones you've already mentioned]
then you'll be ahead of the game.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
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.
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 myself C#. It was good at the time because the development environment was fantastic (Visual Studio) and the API was sane and powerful (DirectX).
Of course, I can no longer continue development of my project with out serious pain because Microsoft has now decided to abandon managed DirectX and leave it's closest descendant, XNA, in limbo.. There may never be the tools to work on it with Windows 8.
I had a desire to do it again, but this time I picked OpenGL ES and Java, Android development.
I'm finding that eclipse is nearly as good as Visual Studio, and Java is about as easy as C#. Also, most of the concepts have translated nicely.
So, I've been spending about 1 hour a day porting that game over.
I guess my suggestion is that. There's certainly other choices, but I think with this you can jump into something that's trendy and fun (Android development) while learning a Java, a fundamental language that should survive the test of time.
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.
Life needs more saving throws.
My background included a significant amount of C and some assembly as well as a variety of other stuff including (not Visual) BASIC (workplace need, not my choice). I finally decided on JavaScript and probably also Node.js. I'm happy with the language itself and being useful in so many places and platforms and situations made it a no-brainer for me. I'd choose to use Linux everywhere, but being stuck with Windows also means that I can do a lot with WSH JScript, which is supported on everything from XP on (maybe 2000, I don't know). I quit bothering to learn to jump through hoops with DOS batch files.
It's all well and good if you're learning but if you don't get to do it on the job then people might not think much of you practice as there is no one to vouch for you or verify your code is good. Put your stuff on Bitbucket or some other source sharing site or contribute to open source. At the very least you can then always point people to your repos when you're looking for a job.
We have a couple dozen computer user groups in our town. About a third focus on coding. Java, web-services, mobile computing, gaming are fairly hot topics these days. User groups are often in meetup.com. If you still have a computer print monthly in your town, they may list computer groups too. Some user groups are lecture oriented while others are show-and-tell their projects. Many of these project are more or less open-sourced on the github cloud code-base server. So you look for a project someone has talked about, starting on the simpler side. Then download, compile, and modify their code. Maybe you could extend it a direction the original author lacks time for. Maybe you could use their code as a guide for you want to do, but you would be mostly starting from scratch. A good starting project is to write documentation for their code. That would mean you'd have to explore the nooks and crannies in it. A second perspective is a real help to an author. Because some authors say "this feature is easy to use" when it really is not.
Probably in the early months you wont get paid for this. But we have recruiting sniffing around our user groups all the time looking for warm bodies.
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
If you want something that will help you learn other languages, don't make the mistake I made. Don't learn Perl.
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. Four if you count the shebang."
Before Perl, I'd programmed in about twenty different languages. Since learning Perl, I've tried to learn half a dozen other languages, but I failed to really get into any of them.
If you want to learn other languages, don't learn Perl.
Cut that out, or I will ship you to Norilsk in a box.
So I see a lot of people saying "it won't happen". Having just gone from a systems admin job at a public school district office for five years where all I used programming wise was powershell within the last year or so (a lot of what you're describing, right?), to a full time programmer job, I wanted to comment. My job search lasted 5-6 weeks and at the end I had two job offers. I had never been a full time programmer, but do have a bachelors in I.T. . What I did was this: I found a few things that needed to be fixed, a.k.a. automated. So some things you'll see are just bad to do manually. For example at my job they had a script some contractor wrote to create student AD accounts at the beginning of the year, but nothing to update for changes. I worked at a military proximity school district so there was a lot of changes during the year. These were done by hand (or not at all). Using powershell I was able to write a program to query our SQL database for current info, check it against our AD database, and make changes if they are needed (new student, change of schools (and drives, groups, etc.). I also made a script (powershell again) to create a tool for our staff to be able to simplify and speed up the creation of new staff members. The thing is this: Learning sucks when it's for an hour a day out of a book when you have my learn by doing needs. By finding a relevant project and taking a stab at it, you'll learn useful things fast. Sometimes reading the super nitty gritty book stuff just puts me to sleep. If the programs I wrote looks intimidating, know they were to me too. You google, then you google some more, then you analyze, incorporate, change, and fit. Some code you borrow entirely, some you create entirely, and a lot of "new" stuff is somewhere in between. I also read seven languages in seven weeks which I liked. Then I got into programming with C# mostly (bought two books), and was fighting between that and Ruby (bought a book). I decided C# was the path for me, then wound up with one job offer C#, the other Ruby, and chose Ruby for it's ease/enjoyment of programming. The future of this looks like web programming with RAILS, though my current position has me automating software verification for medical devices. My advice on switching careers is this. Do something relevant that'll help you learn (and make you look like great to your current employer), after that try a few languages to see which you like, then look at job listing to find what people are hiring for (don't get too intimidated here, which is easy, as employer's "require" a lot they don't necessarily hire based on), and get to learning. Write some examples in your chosen language, make them tight (refactoring, look it up), and start applying.
Graduated, began working at an internal corporate helpdesk at a large ISP. Started off doing Tier 1/2 stuff. Moved up, gained experience with the server side of things, began doing on-site support for a consulting company a major city. Hated it, and moved back to a corporate helpdesk in the same city. Acquired a macbook and iPhone. Took a liking to the mac ecosystem (i was a windows guy up until then). Decided iOS development was what i wanted to do.
Studied and programmed in Obj-C with my free time for about a month (free courses from Stanford available on iTunes). My OOP knowledge was still there, and I decided to quit my helpdesk job, study iOS full time, and try to get a job with that. As luck would have it, I was so essential to my helpdesk that they offered to train and transition me to development, in exchange for an additional month at my old position. (2 weeks was not enough time to backfill).
Went to an excellent bootcamp-style training course which solidified my skills and built up my confidence. Have been programming full-time for just under a year, could not be happier about the switch.
Given your requirements of spending an hour a day for the year and learning over that time, I suggest checking out Learn Python the Hard Way. I reviewed it briefly after being pointed that way in a previous slashdot article (about teaching kids programming), and it has basic lessons, strung together over time into more and more complicated exercises. They have a Ruby, C, SQL, and other tidbits available as well, if Python doesn't seem like your kind of thing.
Cheers,
Andrew
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.
Gentlemen, I've actually trained a lady under me...
HOT. Please post pics.
HA! I just wasted some of your bandwidth with a frivolous sig!
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 again). Like the way most of us learned in high school or whatever when it was just about having fun.
And no this doesn't sugg starting with a beginner or inermediate book. You'll get bored because the concepts will vaguely remind you of things you already kind of know. It's like muscle memory I guess.
So you were mostly right, starting of with relatively less cumbersome languages, environments and tools related to technology you are familiar with. Powershell is really cool and that's what got me back into programming. I wrote myself a dozen cool utilities, many of which already existed, just to encourage my ingenuity and creativity.
One last tip. Comment and comment well instead of doing design docs detached from the code. Treat your commenting and coding as a sort of tutorial; you're showing yourself and others how to accomplish tasks and solve problems. If you get distracted by planning and design in documents outside your code, you may feel less enthusiastic about completing a project, since that is the most time consuming and least interesting part of programming. You can get formal and theoretical later on.
By Programming, Motherfucker
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 accessing human readable numbers of result sets so unless you're doing something really silly you won't actually lock the tables and you won't actually give a rats about getting your performance down an extra couple of milliseconds because it'll all just be noise lost in the http latency, and you will spend the vast majority of your time dicking around with making the front end the right colour mauve for marketing and you'll be doing that in, guess what, html. You'll also in a lot of cases be handing second tier support(if you're lucky) for your own apps. In then end your understanding of business processes will be more useful than your programming knowledge, which if you have the knack will come and if you don't won't. Don't be scared by all the crap Slashdotters like to post about their jobs where they spend 8 hours thinking and 10 minutes doing or where they need to understand sql incredibly well to avoid problems(in most languages these days you won't actually touch raw sql anyway)
Fundamentally though, your plan will fail, you can't learn programming an hour at a time because you can only learn programming by doing it and an hour will just about get your IDE booted up and allow you to work out where you left off the day before.
Try BlitzMax (http://blitzmax.com/Products/blitzmax.php). It can do GUI, console, games, even CGI. Nice OOP language with hundreds of libraries and east C integration. It made me love programming again, the way I did back when I first learned. It's a great language to bang out a quick tool or idea.
www.blueapples.org
I am going to get marked "troll" for this, I know, but Python is really worthless unless you are working in an IT house. The language is not that popular outside of the open-source community. The language has too many drawbacks - its SLOW (as it is not compiled), and any major revision to the language requires you to either rewrite your code or have 3 or 4 different versions of Python on your machine. Don't get me wrong, Python does have some uses, but unless your company specifically asks you to learn it, I wouldn't bother. It's probably going to do nothing for you on your resume.
Probably the 4 best things you can learn are Pearl, PHP, SQL (not really a programming language, I know), and .Net (oh, here come more troll comments). Those look really good on resumes, and seem to be the things that the majority of businesses are using.
If you plan to go into a software house, also learn C and Java.
HTML5 and CSS may also be good things to brush up on if you want to do web / app stuff.
Choose the field, then the language.
In terms of the field, there are two basic things you can aim for: One of the popular fields (Web, Mobile, Games) or the big-bucks||safe-job fields (ERP, non-trivial Databases (big-table or big-company), *nix maintenance, embedded systems, specialized vertical markets, Enterprise Client/Server, etc.)
It depends on what you want to do.
Once you've chosen your field, you choose your technology and then your PL. For Web and Mobile, using anything else than free open source technologies these days is silly and pointless, for Games and all the other stuff it probably will be some proprietary closed source stack/technology.
The PL itself should be an official independant standard either way. Which PL it will be in the end depends entirely on the choices made above.
If you want to make a solid and future-safe switch, I'd stick to the chosen field and become an expert. Better jobs that way. ... Unless the technology goes entirely belly up. Happens rarely, but was the case just recently with Flash/AS3 - which, for example, got me by the balls, since AS programming was my main source of income until two years ago.
Good luck.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
It'd be after, and unless you're in Canadia, then no. I may work in the public sector, but I don't work like most of them do.
What type of phone do you have? Android? Learn java. Not the type of Java these people are talking about, I mean learn android. Have an iPhone? Learn iOS dev stuff. Do it every day for a year. Show it off during the interview. You'll learn something that is in high demand and you'll get the job you want.
Your sig(k) has been stolen. There is a puff of smoke!