views:

526

answers:

10

I'm currently a network engineer, but find myself wanting to get into the world of development. I took a little bit of Java in college, am 27 years old and have been network engineering for 4 years now. I have a mortgage and student loans so going back to school would be difficult. I'm willing to put in however much hardwork is needed around my full time job to learn, but part of me feels I may need actuall schooling to get down some of the advanced concepts. Just looking for a little advice and direction. I have purchased a bunch of the Head First programming books and have begun reading through some of them as I figure out my way into this transition.

+5  A: 

You do not necessarily need schooling to make this transition, but one way or another you do need to start writing code. You will not learn nearly enough by reading through books, and the hands-on experience of working through "real" problems is essential.

Plus, this way you can use this experience as a means to help you convince a potential employer to take a chance on transitioning you into a programming role.

Justin Ethier
Yes I agree with this whole heartedly. Pick a super small program, write it, then write something bigger. You will learn best by doing. I have read whole books on SQL without retaining much of it because I just read it and didn't practice it. Just write increasingly more complex programs!
John Baker
+1  A: 

To get you kick-started, you could subscribe to a video tutorial service, such as lynda.com. It's an easy way to get started in the latest technologies. But you'll build your real knowledge by doing. Create your own project and get started. That will put you to work on solving programming issues and really learn programming.

Gert G
Gert, thanks for the link. This is an amazing site and one that I will definetly continue going too. I'm definetly an audio/visual learner and this seems to do a good job is giving me a classroom experience without taking a class. thanks!
bgc83
No problem. I find their courses being good starters in new technologies. All the best in your new career.
Gert G
+3  A: 

You know all those useless and annoying suggested programming problems in programming books that are all too easy to ignore? You really should do them. They are usually well chosen to challenge you to actually put to use what you have been reading and learning. Plus, writing this code is the only way to really "get it."

Guzba
+12  A: 

Let me tell you my opinion, and you can take it for what it's worth. I'm a high school dropout, technically the last grade I graduated was 8th. I'm 28, so fairly close in years, but I have been programming for about 12 years now professionally. I learned on my own while in school and with little access to any computer. I got a book on Basic (great easy place to start), wrote some simple programs on paper with the Basic book in hand, then finished my Math homework ahead of time (in 8th grade) so I could use the computers for a few minutes here and there to program.

It honestly is not that hard. You don't have to learn advanced CS concepts or feel you need to know everything. If you have 6 months and you put a lot of spare of your spare time into it you can get to the point where you could get a job for 40k without much of an issue (assuming you are not in a terrible job market. Even a bad job market is fine). Then once you have your feet wet, I'd worry about some of the more difficult concepts.

My personal opinion here is to start with something easy. Java is not easy, it's extremely hard to start with. It has a lot of advanced CS concepts implemented and a mind bending amount of rules in regards to syntax. Pick a language that is easier to get your foot in the door with and doesn't have a monster learning curve. My suggestions would be php/ruby on rails/python. One of those would ease you into it. Then if you want to go all out you can do Java. The problem with Java and C# is that you have to know a lot of different API's for them to be useful, and when you add learning Java+Spring+Hibernate+XML+SOAP together it's a headache.

You don't need schooling you just need very simple easy to understand books and some hard work. In 5 years you could be earning 80k in a decent part of the country (more for NY and San Fran. etc).

I work with Java professionally and make almost 100k, though not quite. If I, a middle school graduate" can do it then you probably can do it without a problem. For what its' worth, I have 2 friends who are in college who are going into their 3rd year and really don't know anything about programming. They know more Formal Automata Theroy than I ever will, but can't program anything other than the most simple stuff.

So in summary, don't worry about algorithms like binary search or something more complicated like Graph Theroy. Most programming is really straightforward compared to that. Anyway, best wishes!!!!

John Baker
John, Thanks for the suggestions! Turns out that I was actually reading a Head First Java book haha. What you say however makes sense and I think thats the way I will go. I have found the Headfirst books to be very useful, I may get the Ruby one as well per your suggestions of getting into that language.
bgc83
One note is that Ruby is pretty quirky. if you find it difficult to follow (and I was programming for 8 years and still found it hard to figure out in the beginning), then I'd really back down to Basic. You can learn basic in a weekend and write some fun stuff with it. Everything you do in basic you will be doing 100x over just on a bigger scale later in your career. I keep harping on my college student friends to give up Java and just learn basic, since they know all the terms but don't know the essence.
John Baker
I agree with what you're saying - but only to a point. It's extremely dangerous for any developer to "believe in magic" - to believe that there is any part of the stack that is not just unknown, but unknowable. Sure, as a beginner you need to focus on the core essentials - but you should not *remain* ignorant of the underlying details.
Bevan
Bevan I'm not sure what you are talking about. I don't advocate shying away. I advocate him not thinking he's a horse and trying to drink like one. You can't learn it all overnight and I have cost myself many months because I tried to learn things that were beyond my ability at that time. He will learn, and then he can tackle what's next. Nothing I said should be taken as avoidance of being a responsible developer.
John Baker
@John: Kudos on the career success. I've taken an opposite path to yours (four degrees in CS) and we're both essentially experienced developers. I always argue that one needs talent, not degrees, to be a good developer, so it's good to see a living proof.
Uri
+3  A: 
  1. It turns out you can learn a lot on StackOverflow.

    Once you pick a language, read the questions posted to that topic. A lot will be from students learning the language, which should be at your level.

    When people post homework, try to solve it yourself... it can be a lot of fun (seriously... we're that nerdy), and you might learn a thing or two.

  2. Find a project. You learn by doing. Care about open source? Want to program as a hobby? An easy introduction might be to start writing scripts to help you in your current job. Anything, just write code that works, preferably with people who can provide you feedback.

Stephen
+7  A: 

The best way to become a programmer is to program.

Yes, I know that sounds trite, but it's also true. You become a programmer by writing programs -- nothing else is a substitute. You can read books, you can take classes, but at the end of the day, what makes you a programmer is writing programs. The good thing this is, it doesn't really matter (initially) what sort of program you write.

What will matter is your choice of a first programming language. Java is a wonderful language with a broad range of applications and high commercial value. The same can be said for C# or C or C++. They are also very unforgiving for new programmers. Instead I would recommend starting with a modern cross-platform scripting language, such as Python or Ruby. Either of these languages can be used for full application development or simple task automation, while still being easy to learn (and fairly forgiving). If you would rather start with web applications, PHP (or Ruby/Rails or Python/Grails) makes a good starting point.

Given that you work as a network engineer, there are certainly aspects of your job that could benefit from automation -- writing shell scripts (and particularly, debugging them and making them robust) to do that automation will give you some of the experience you need. If you work for a company that employs programmers, then this type of coding may also give you (and your growing skills) some much needed visibility. I strongly suggest that you NOT start with automating mission critical tasks where a bug in your script could wipe out company assets -- start with something small first. ;-)

[Added]

Another reason to just start programming, is to see if you really have a talent for it. If writing small programs is frustrating and unrewarding (no sense of self-accomplishment), that's a sign that you probably shouldn't consider it as a career path. There are already plenty of people out there who program for a living, but who really should be doing something else. You won't succeed at programming without working at it, but simply working at it isn't enough.

While you're at it, go pick up a copy of The Pragmatic Programmer -- it's inexpensive, but filled with good advice on programming.

Craig Trader
bgc83
If you're spending a lot of your time in Windows, then I'd recommend looking at PowerShell, which is Microsoft's answer to Unix shell scripting. PowerShell is a .NET language, but is intended for automating systems administration tasks.
Craig Trader
+2  A: 

You can get some or most of the benefit of "actual schooling" by looking through lecture notes posted online from university courses and attempting their assignments (also often posted online). Start with beginner/intro courses first and build from there. Once you get to intermediate/advanced level courses, the theory behind some of the "advanced concepts" you're worried about will be presented to you in the same fashion they would be if you were sitting in a lecture hall.

Once you've started getting comfortable with a language, learn to read through its API (this is often a good place to go when you have questions about specific language features, classes, or methods).

Look for other problems and exercises to solve (the best way to learn is to do). Also make sure to look around and read solutions coded by others. They may teach you new ways of approaching the same problem or possibly more efficient ways of doing the same thing you were attempting. You may also see practical implementations of "advanced concepts" which can help you learn by example.

mocybin
+5  A: 

I'm going to go against the flow here and tell you not to even bother. You've had plenty of time around computers, and even had formal training in a programming language. If you wanted to be a programmer you'd be doing it already.

There are plenty of ways to make money, but programming is one of the toughest. You're under constant deadline pressure, spend more time studying than doing, get very little appreciation and on top of all of it, once you're "done" with a project, get to realize that it's just the beginning.

The only reason to do it is because you love it. And if you did, you'd be doing it already. It's a craft, and the reason this site gets so much traffic is because most of the people here do it not just as a trade, but as a hobby as well.

I'm in no way implying that you can't do it. Just that money can't be your primary motivation. If you really broke down what developers get paid, you'd probably find that our total investment time so outweihgs our actual work time that we're not paid that well at all.

Tequila Jinx
Thats very interesting. When I was in college I had an interest both sides of computing, both the programming and networking. I managed to get good internship working on the network team for GA dept of audits and that lead me to believe that was the direction I should go. I ended up switching majors in college and going MIS instead of CS and persued getting a bunch of firewall/switching/networking certifications. It was a small college and we had a very flimsy computer science department which only had classes 1 semester out of the year due to lack of signups. (cont)
bgc83
Because I wanted to finish college and get out into the "real world" I stuck with what I knew and began doing network consulting straight out of college. But while I may be good at networking, i'm not passionate about it. During these past 3 years I've found myself feeling more and more drawn to the world of programming and its not about money for me as much as it is about the ability to create something and make a real difference.
bgc83
I hope I didn't insult you by my comments. Reading them now I feel I came across a little harsh. I love development work, largely because of what you said, every day I come to work and invent (whether I make a real difference is up for debate).
Tequila Jinx
+1  A: 

I may need actuall schooling to get down some of the advanced concepts.

You don't need actual schooling to learn the advanced concepts. In fact, it's quite the opposite. Schooling only teaches you the basics! There's a reason for that: time, budget, course constraints. The advanced concepts are learned from self-studying and exploration. You learn these concepts by going to Google and reading articles written by other people. You learn them by reading books, specially with those that deal with the API.

So don't waste your money in enrolling back to school. They only teach the basics.

Here's my advice. Find a tutorial on the web. Read it. Program it. Now, find another one. Repeat and rinse. Eventually, you will encounter something you don't know. Search the web about this topic you don't know. Once you know, program it. Repeat and rinse.

Eventually, you'll learn the advanced concepts.

Mark915
+2  A: 

I'm going to say it would be nice if you could start from the more procedural type of languages before going into the OOP type. The kind that focuses more on the problem solving, algorithms and logic challenges while you get to be more comfortable and familiar with the most common/basic programming constructs. But I see you've already had some background in Java so it should give you some confidence to deal with more advanced OOP concepts if you wanted to. I'm just saying it's hard to appreciate (understand) certain OOP concepts if you're not aware with the problems and challenges they're trying to solve. If you're reading books, you're already on the right track.

pymendoza