There are a couple things that my college degree never taught me:
- source control. If you're going to be in the MSFT stack, learn how to use VSS. If you'll be in the LAMP stack, then learn svn. You don't have to know how to administer them, just how to use them on a day to day basis.
- databases. Learn to write queries (select, update, insert, join, create, alter, etc.). Learn SQL Server and mysql and oracle syntax (probably not in an out, but enough to know that there is a difference).
- use cases and UML. Large companies and consultant shops will tend to produce a lot of documents. If you know some UML and are able to make use case documents, then you'll be ahead of the game.
- build and deployment. Learn (n)ant, build, make, shell script, whatever. Be able to build a piece of software and deploy it. It amazes me how many pieces of software have no automated build or deploy scripts.
The question is how do you get this knowledge. It's too late now, but you should have tried to either get an internship or a job while you were in school. Now, I would pick something that you think would make a good project and actually build it. Not just start hacking, but think about the problem and really build it. If you are going to get a corporate or consulting job, this is what you'll have to do, so get used to it :)
Pick something you're reasonably knowledgeable about and that you think that you'd want to use or someone else would.
Here's a couple good ideas:
- student/employee/company directory application (I've written at least 3 employee directory apps for clients. If you could write a good one, this would be a definite way in to some places).
- movie/bar/store/music/concert review webapp
- twitter clone
- facebook clone
- cms tool (think lightweight cms)
- carpool creation site
All of these can be shelled out in a couple days with RoR/Django and would give you a HUGE confidence boost and would be a great addition to a portfolio. Of course, using a framework with obscure the sql details so maybe you'll want to do it in ASP.NET with C# (VB.NET is not what you want to know if you want to be "in demand") and then do it in RoR/Django to get a feel for one vs. the other. In fact, you could make a business out of them (if they didn't suck too bad!).
I would use them as a learning tool, writing some rudimentary use cases for what you want the app to do, diagramming a bit of your preliminary design (and it will change, it always does), building a db schema, running queries, writing code and integrating with a source control system. Treat it like a job too and dedicate at least 3-4 hours a day 5 days a week to it.
I think the biggest change for full time students that don't work to handle is going from 12-15 hours a week in school to 40+ hours a week at a job. At school you have 5 times more free time than you do at a job.
I may be unusual, but I have more free time in the summer, while working full-time programming, then I do during the school year. But maybe that is because I'm taking 17 credit hours (5 CS classes, all upper division) at once. I probably put in 60-80 hours a week, no exaggeration.
I went to school full time (min 12 hrs) and worked full time (min 40 hrs, sometimes 2 jobs) the entire time I was in college (hey graduated with only $7k in debt though!). There is no way I'd have been able to, let alone wanted to put in 60-80 hours for course work (still graduated cum laude, 3.5+ gpa). Either you're in courses that you shouldn't be or you're doing too much "extra work."
You may be right. This is the last semester of my Senior year and I'm trying to finish my undergrad up so I can start on my Master's next year. My Junior and Sophomore years weren't as bad school wise, but I was working part-time during both of them, so all in all I was probably still busy about 60-80 hours a week. I guess my point is that I've gotten used to being really busy, and working only 40-50 hours a week won't be a problem. Sounds like you're used to being busy as well, working full-time all the way through school.
Source control, DBs, and Documents - Check, Check and Check :) I had my suspicions here - now I have some confirmations. I know the basics here, but I definitely could stand to be more proficient.
School has taught us nothing of Source Control; I don't even think it has been MENTIONED - likely because we have not participated on a project that has a complexity that would really justify it (other than the practice).
SQL doesn't seem too terribly difficult (the class was a cake walk), but I need much, much more practice in it so I can stop referencing docs every time I need to do something more complex than 'SELECT *....'
As far as the documents are concerned - guess I need to break out the old text book again :) I did it, and I made good in it, but I hated it. I will not lie, I despised use cases, requirement specifications and UML diagrams, but I guess I need to get over that and learn to like it - or at least tolerate :)
I have to admit complete ignorance on automated builds and depolyable code. I guess I need to get my butt in gear and get familiarized. My university (Troy University) has only taught using MS technologies (I use Linux personally - thank god my Q6600 runs XP smokin' fast virtually) and so the extent of our deployment has been zipping up the solution files and the compiled executable and submitting it to the teach (heaven forbid you send something ending with '.gz' - I was actually told I sent a corrupted file one time).
I guess I need to get my ideas out and working. I have been hashing around in my head very similar projects to what you are suggesting... I actually purchased a domain a while back for doing just that, but, well, just haven't done it. I really like RoR, but my webhost (FriHost) doesn't support RoR, so I guess I will be limited to python if I really want an opened deployment :)
Thanks for taking the time to respond with so much valuable info!
There are a couple things that my college degree never taught me:
- source control. If you're going to be in the MSFT stack, learn how to use VSS. If you'll be in the LAMP stack, then learn svn. You don't have to know how to administer them, just how to use them on a day to day basis.
- databases. Learn to write queries (select, update, insert, join, create, alter, etc.). Learn SQL Server and mysql and oracle syntax (probably not in an out, but enough to know that there is a difference).
- use cases and UML. Large companies and consultant shops will tend to produce a lot of documents. If you know some UML and are able to make use case documents, then you'll be ahead of the game.
- build and deployment. Learn (n)ant, build, make, shell script, whatever. Be able to build a piece of software and deploy it. It amazes me how many pieces of software have no automated build or deploy scripts.
The question is how do you get this knowledge. It's too late now, but you should have tried to either get an internship or a job while you were in school. Now, I would pick something that you think would make a good project and actually build it. Not just start hacking, but think about the problem and really build it. If you are going to get a corporate or consulting job, this is what you'll have to do, so get used to it :)
Pick something you're reasonably knowledgeable about and that you think that you'd want to use or someone else would.
Here's a couple good ideas: - student/employee/company directory application (I've written at least 3 employee directory apps for clients. If you could write a good one, this would be a definite way in to some places). - movie/bar/store/music/concert review webapp - twitter clone - facebook clone - cms tool (think lightweight cms) - carpool creation site
All of these can be shelled out in a couple days with RoR/Django and would give you a HUGE confidence boost and would be a great addition to a portfolio. Of course, using a framework with obscure the sql details so maybe you'll want to do it in ASP.NET with C# (VB.NET is not what you want to know if you want to be "in demand") and then do it in RoR/Django to get a feel for one vs. the other. In fact, you could make a business out of them (if they didn't suck too bad!).
I would use them as a learning tool, writing some rudimentary use cases for what you want the app to do, diagramming a bit of your preliminary design (and it will change, it always does), building a db schema, running queries, writing code and integrating with a source control system. Treat it like a job too and dedicate at least 3-4 hours a day 5 days a week to it.
I think the biggest change for full time students that don't work to handle is going from 12-15 hours a week in school to 40+ hours a week at a job. At school you have 5 times more free time than you do at a job.