I just got a letter from ITT. They have a program called 'Software Applications and Programming'. I'm not seriously considering this but it did raise a question in my mind.
I really want to learn to program, to write computer software, to design and build applications like MUD servers or clients, etc.. Is going to school for this a good idea? I don't mean financially, as a career, etc. I mean in this context: I can afford to go to school. I have the time to go to school. I am a diligent student, I know I will work hard and likely be very successful in my classes. So, that said:
-Is it an effective way to learn how to program? -What types of schools or specific schools are good for these types of classes? -x- University? Community college? Trade school/technical institute? -Do I want to enroll in a degree program? Which? -x- What specific classes are good to take/most useful? -x- What specific classes aren't useful or good options? -What math would be useful to have a working knowledge in BEFORE going to school? -What math will I need to study once I'm taking classes?
That's probably a good start for now. I don't expect any one person to answer every question, though if you feel so inclined, it would be appreciated! I know there probably isn't a right or wrong answer to any of these; I just want to tap into this well of experience that all you programmers at Mudbytes might have and hopefully be able to make an informed decision before next quarter starts. Again, I appreciate any contribution to this thread!
P.S. I live in Seattle, WA if that affects any of your answers.
P.P.S. I would honestly consider moving to another state if a school there had the "perfect" option.
Edit: When I said "I'm not seriously considering this" I was referring to ITT tech's specific proposal. They spam me with offers like the Navy academy does in the mail. I usually look through it and throw it away but this one got me thinking..
13 Jan, 2013, Ssolvarain wrote in the 2nd comment:
I can do the bare-bones basics of mud coding, and all I learned in college was pseudo code.
I'm sure if you took it seriously and applied yourself, with the occasional help from the good folks here at mudbytes, you shouldn't have much of a problem without ever paying a dime to any kind of school.
But I'm against traditional classroom education, myself. Take it how you will.
Don't go to ITT. All good programmers are self-taught, some additionally have classroom hours and degrees on top. If you do want to go to school go to a 4-year University. Do _not_ go to a trade school, you will pick up bad habits.
No offense, you sound young, unless you are independently wealthy you probably need to go to school for something and at a place that will look good on a resume. If you don't care about employment prospects, well of course a degree is a waste of money because there will be some classes that you just aren't interested in - why pay for those to complete a degree if you really don't care. However for most folks, yes, you want a degree.
The degree program that will contain the classes you want to take will be Software Engineering. Computer Science will contain many of those same classes, but with less of a programming emphases. If one school offered me a better deal, I'd not be picky, employers don't seem to differentiate and you have enough flexibility in your schedule to load up your upper-division electives with programming courses in either.
Community college should be on your radar only as a way to satisfy curriculum hours that are per-approved by the university to transfer as specific classes as part of your 4-year degree. Feel free to take as many as you can there, but only take courses you are NOT interested with AND you can finish up the sequence in AND are certified by your target university and degree program to transfer as specific requirements and not as electives. Don't be a dummy like me and take 2/3rds of your foreign language at dunce-high community college and then get your rear-end handed to you when you move off to a real university :)
So your questions in order I guess…
Is it an effective wya to learn how to program? errr…probably somewhat but the average programmer is terrible and not employed in the field at this point or employed doing something they really dont want to be doing
What types of schools are goo for these types of classes? Engineering Universities are best Big-State-U general universities are fine and good if you get a good offer Do everything you can to avoid having to go below this
Do I want to enroll in a degree program? Probably yes, probably Software Engineering or Computer Science. Also look at Electrical Engineering, Cognitive Science, and if you are Mr. Smarty-pants Bio Chem and just plain old Math can and does do tons of programming. If you are a proper top-notch programmer with a BA or MA in Math you Will Not Starve.
What classes are good to take/most useful? If you can find one, take a functional programming class and take em all the way up. Become a functional Jedi. Take a micro-controller programming class because robots are fun. Take the minimum at the lower level and fake your way into the higher-level courses that are more about doing specific types of computing/programming that learning the nooks and crannies of various programming languages.
Aren't useful? Any intro to computing class is going to be a complete waste - get an over-ride. Any intro to programming if you already do any programming is going to be most of a waste - better to wall-paper over any remaining deficiencies and get over-rides if possible, they can be corrected later. A whole slew of humanities you will have to take - soft sciences, foreign languages, maybe even a hard science like biology or physics if you have to take it. If you see a school that requires any orientation classes beyond 1 credit hour, write it off your list to attend, it's a scam school. Within the field I'd stay away from networking classes, kernel internals, data structures, etc. unless they interest you intensely. Math wise…you need PreCal under your belt and be prepared to repeat it at University along with Calculus proper. Better schools tend not to accept transfers of Cal so make sure to check that before you go. Once you are taking classes…dunno, depends on the school. In reality you will probably use none of it "in the real world" but if you want to do 3D anything you better load up on the higher level general calcs that are reserved for math majors. There are certainly fields of employment where huge amounts of math are nearly mandatory but for general programming if you can count without taking your shoes off your gold. For bit fiddling, you can't think of it as anything other than the raw bit fiddling - you need to just do it until you grok it.
Oh and last but not least. Do not trust your admissions officer/degree counselor/etc. Sit down with the course bulletin and plan at what classes you are going to take each semester until you graduate as best you can from semester 1. Try to plan around courses that are offered every other semester. I have seen so many people spend 1 or 2 extra years in school because they were put in classes that ended up transferring as electives, classes that were in field but really should have been in-field at a higher-level because they needed X hours above the 3000 level to graduate, etc…
Let me know if you have any questions.
Let me know if you have any questions, sorry if I've been overly opinionated.
Go to school. The nicest one you can afford. While there, fulfilling your freshman requirements, talk to people and learn about your options. It's easy to transfer to a different school with a program you want, or change your major at your current school. Spending your first two semesters taking core requirements gives you time to sort this kind of thing out.
There's nothing wrong with taking programming courses, any more than there's anything wrong with taking Anthropology. Despite what you may hear from self-taught people, there are things you can be taught by others you likely would not have learned on your own, and they can be critically important. For serious advice about a programming career, talk to all the relevant members of the full time and adjunct faculty in at the nice school you chose. Then remember they chose not to pursue a programming career, and start asking for references and introductions to alumni who have.
Note that this advice also would apply to an Anthropology or basket-weaving career. It's possible to be a self-taught anthropologist or basket-weaver. It's still a good idea to go to school. And don't be surprised if you start off certain that you're going to be a programmer, and graduate with a degree in comparative anthropological handcrafts culture and a bright future in that field. Believe me, your passions now are no less real and fundamental than those of others who found a different vocation after a few years of study and self discovery.
The smartest thing you can do is not ask again on the Internet for advice on your education, and most especially not a hobbyist forum. Just go to school and sort it out there.
@Rob (and the others, I guess): You are correct..ish. I am kind of young. Early twenties. Independently wealthy, yes. I already have a degree (technically two and a minor) and I could probably pickup a scholarship to most of those Engineering Universities/Big-State-U's.. or just pay my way in.
@Cratylus: I pretty much scrapped your whole post. No offense. It was cute, and totally applicable to a 15 year old who is doing running start, has no work experience, no money, and only a "cerebral" idea of what he wants to do with his life. I'm not looking for "career advice". I'm a successful entrepreneur. 2012/2013 is me opening a microbrewery/brewpub in a trendy village in Seattle, doing all the work (demolition, electrical, plumbing, concrete, painting, install of equipment, brewing, kegging, and running a bar) with my brother and our long time friend and brewmeister. Why? Because we have the capital for startup, the time to devote to the project, and the passion for the career. I love constructing things. I love brewing beer. I love drinking beer. I love selling beer to the many walk-ins and regulars at the brew-pub. I love selling MY beer to those people, in MY joint. Was it a hobby? Yes. But the skills I applied (carpentry, electrical, plumbing) I learned mix-mashed between school, self-taught, and work experience. So take this story, and apply it to a MUD. That's what I'm going for.
The smartest thing you can do is not ask again on the Internet for advice on your education, and most especially not a hobbyist forum. Just go to school and sort it out there.
Well that too.
Let me reiterate: I'm not asking for advice on my education. I'm asking for advice on becoming a better programmer (so I can write software - SPECIFICALLY THE SOFTWARE DEALT WITH ON THIS HOBBYIST FORUM - as a hobby. It sounds more like the smart thing to do is to ignore your replies. No offense, again. Heh.
9 days… meh that's nothing. It only took me 27 years.
When I say 9 days, I mean 144 of the total 216 hours was spent reading about code, writing code, or debugging code. The web stuff is all fairly straight forward. Lua is awesome. I would like to spend the next 27 years working with C and C++ to further my understanding of those subjects. I know I'm only scratching the surface but the point is, I'm scratching really hard, digging my nails in. I'm not trying to be… <insert the word the most appropriately describes the negative connotations you've begun to associate with my previous post>. I just want to learn. So please, suggest a book! :)
Edit: Oh, you edited in a book suggestion, and I like this book. I'm going to stay up all night reading it, sleep from 6:00am to 7:30am, and then cram as much ruby as I can between 7:40am(allowing time to make a mocha and have a cigarette) and the Seahawks game as I can. Thank you so much, Tyche.
Academic stuff (a little of everything to grasp how a computer work, down to the circuitry), nothing actually useful to program in itself, but all those things that self taught programmer lack in general cause it is not exactly 'productive'. Good practices, like a real grasp at how to use objects in an effective way, building databases. Sure all those can be learned by book, like any education. But having tutors is also nice. Also, being forced to use good practices helps.
Let me reiterate: I'm not asking for advice on my education. I'm asking for advice on becoming a better programmer (so I can write software - SPECIFICALLY THE SOFTWARE DEALT WITH ON THIS HOBBYIST FORUM - as a hobby.
If you're not interested in a general education in software development and only want to learn to make MUDs why not just grab some code from the repository here and start tinkering. Pick a codebase you're familiar with as a player and try to figure out how the code works and how it relates to what you see in the game. Then you can try making changes or additions of your own. Plenty of people who run successful games started out that way I'm sure.
If it's books you want then "The C Programming Language" by Kernighan and Ritchie is a standard text. I'd also recommend "Designing Virtual Worlds" by Richard Bartle.
Hi yue, that brewery sounds look good fun! Don't lose it out of sight while working on MUDs ;)
I actually went through a Bachelor's in Computer Science and a Master's in Software Engineering. When I started my studies I had 6 years of self-taught knowledge and experience. After my studies (actually next to my Master's already) I worked at a really succesful and fast-growing startup (we were the Netherlands' biggest social network until Facebook took us over 2 years ago).
I do believe the best programmers are self-taught. Mostly because those that aren't typically are simply not as passionate about programming. It's a field where experience matters. Starting university with 6 years of prior programming really gave me a head-start.
So, unto your questions… Do studies make you a better programmer? Very much, yes. Would I recommend it to you? If your goal is to build MUDs, no. It would be overkill for that.
My advice too is to get some good books. Do some tutorials. Play with some open-source projects (MUDs or otherwise). Get familiar with a few different programming languages.
I see you're already doing most of that, so you're onto a good start! Keep working at C and C++ too, knowing about manual memory management and pointers will really give you a deeper understanding that will pay off no matter what other language you're actually programming in. If you really want to be thorough, try a little exercise in assembly as well.
Some additional books I can recommend: - Code Complete - The Pragmatic Programmer
PS.: One more word of advice I'd like to give: Take it easy. Sleep deprivation is a sure way to kill your cognitive abilities. You sound like you made a reasonable deal of progress in those 9 days, but I'll assure you you can do even better if you just sleep 8 hours a night. Not to mention you might be able to actually keep that pace then :) I know it's exciting to learn new stuff, to experiment and to see progress, but nobody here would like to encourage you to give yourself a burnout ;)
>I do believe the best programmers are self-taught. Mostly because those that aren't typically are simply not as passionate about programming. It's a field where experience matters.
Experience is one thing, good experience is another. It is very easy to learn very bad practice on the internets or with the wrong books. Most self taught programmers are unaware of such simple things like the differences between 32 and 64bit. (and hell…too many IT students as well). Why ? because the only computer they use to develop is their. And that's another thing you learn in CS courses (or should) That there is more than one CPU architecture, and all of them have subtle differences even if you use the same langage. Not to mention some langages you will hardly ever see elsewhere like OCAML.
One thing though…as with books, how good the teachers are and what are the course contents should be studied before taking it. If it is only about programming, you can skip it, it will learn you nothing of real value.
I'm going to avoid multiple quotes from separate posts, apologies, but consider this a reply to all that mention similar concepts.
Brief background so you know where this is coming from: Around 13 years old, I began to teach myself to code for a friend's MUD. I did little things, such as making new spells/skills or balancing current ones, along with races. Copy/Paste/Modify concept. This improved over the years. In college, CS courses. B.S. degree in Comp Sci, and fast forward a bit - now on a PhD track under Software Engineering.
In general, the best programmers in my courses were those that already had programming experience. Self-taught is a terrible way of saying it, since every single student had numerous bad habits that they had to break. Those without any experience before going into the classes could get caught behind though. There are literally decades of experience that schools try to cram into your brain, using numerous methods, and all in a way that should assist you going forward.
Example, I learned C by myself - the basics. My first CS courses used C++, and that was easy to pick up from a C background. When I transferred to a 4 year uni, first courses were Java. Different, but still extremely simple. Now, however, my favorite question in an interview is "What programming languages do you use?" because it honestly makes little difference. I use numerous programming languages, depending on the situation, and if a project requires a language I haven't used before then I can pick it up and use it within a day and be proficient within a week. This is common for most programmers with a CS degree, simply because we [should] have learned how a computer works, what is computable and what isn't, etc. Everything from the high level languages down to the hardware. I look back to code I did at 13, 17, or even 20 and it is absolutely disgusting compared to what my code looks like now. Why? Bad habits, lack of knowledge, optimizing what the compiler would already optimize anyways, lack of understanding about bottlenecks, etc.
Truth is, without those bad habits, I would never have appreciated the optimization steps in compilers as much. Without understanding computer architecture, I would never have respected the JVM as much (at least in terms of portability). Without an in depth look at Software Architecture and Software Engineering, I would never have actually completed a large scale project efficiently (despite having the ability to do so if given an immense amount of time).
The point of this is to say that you'll gain a lot by teaching yourself to program, but to fully understand programming from all the different POVs necessary for larger projects then you really need the experience of a degree (if you wish to be efficient through out your project). On the flip side, everything learned in a classroom can be learned on the internet and via books. Additionally, based on your own [yue's] wording of your posts, you don't like to do things slowly. There's a reason that degrees take years, and do you really want to put in that many years for a hobby? (Not expecting an answer, but just steering you to reflect on the commitment of the choice.)
So my advice if you do not actually go to a university to learn the concepts: Look up a CS curriculum and read up on what you find interesting in it. Start at the beginning, go through the text books, and do the actual exercises. Come up with your own exercises, as if you were a student trying to suck up to the imaginary teacher for extra credit. Try to master the concepts presented in the texts. Also supplement the text books with your own books, again mainly in what interests you so that you don't lose focus, and then every once in a while, focus on a less "hobbyist" class such as Computer Architecture, Compilers or Operating Systems.
For some amazing quick read books that get to the core of a lot of concepts quickly in a way that you will remember them, I highly suggest the Head First books. These are not the same as text books, and are not meant to be reference books either, but instead they are to be read from front page to back page. They seem quite childish compared to standard, dense text books, but they have assisted every body I know that has ever read one. Disclaimer: I've only purchased two for myself, so there is a bit of an assumption here that the rest are similar.
@Idealiad, arendjr, mangan: thank you so much for your advice.. I got a lot out of what each of you said.
@mangan: You said a degree takes a long time. It doesn't have to. I've been through Uni already and finished two degrees in 3 years. I tackle school the same way I'm tackling MUD development/building a brewery. Balls to the wall. :)
@tyche: thanks for the book suggestions.. amazon! :D