My goal is to learn how to program a website with Python/Django in the next year. From what I've understood, I also have to learn HTML, CSS, JavaScript.

I understand in order to build a website, I will need to find a co-founder whose skills far exceed mine. But still, the situation will be way different if I'm a person who's closer to his/her level and has dedicated a lot of time teaching himself than every other "I have an idea, just need a tech co-founder" type of guy.

I do plan to pursue a degree in computer science, but after finishing high school last May decided to take an year off, so I am free to learn programming in the next 10 months.

For now, I have the chance to attend some college courses in a top institution. Which ones are a must for a web developer so that I don't have any gaps in my understanding of programming and write "sophisticated code"?

EDIT:Thank you all for the help!From the courses suggested I may be able to attend some/none/all of OOP(with Java),Networks and Graphics,SE-Algorithms,Discrete Math for Comp.Scientists,Databases,Information Retrieval and Data Mining.Which of those are more important for Web development with Django?

I've read a lot of times people saying that self-taught programmers had gaps in their knowledge, didn't write clear code.This is why I'm asking which CS courses can fill those gaps? Not only in practical skills,but in mindset,way of thinking.

  • 3
    If your college offers anything at all in Human Computer Interaction take it – Ben Brocka Oct 23 '11 at 17:04
  • 6
    There are no "musts." You can be a great programmer with no degree, just as you can be a terrible one with a doctorate. – Pubby Oct 23 '11 at 17:05
  • There is Human Computer Interaction but it's in the 1st semester.Can this course be learned on my own – Anton Oct 24 '11 at 17:23
  • 2
    @Anton I would recommend a proper academic course, but there are many great sites, I would recommend actively following UX and HCI websites/blogs to help keep you up to date, much of the fields especially UX are focused around techniques applicable to web design to help keep your users happy and help them accomplish their goals. Also peek at ux.stackexchange.com, but we're not really a general or starter reference – Ben Brocka Oct 24 '11 at 19:59

First, understand that a CS degree is generally not vocational education. Many of the courses develop the logical thinking that is required to solve complex problems. These courses are heavily math and computer science focused.

With the exception of 2-3 classes, what they do not do is teach you a specific set of languages so you can go get a job as a "X" Developer. Teaching yourself basic web programming for Javascript/HTML/PHP (or some other serverside language) generally takes just a few months of self-training.

It is a good idea to get a degree in computer science. This should be a part of an overall plan to self-improvement that takes years of practice and self-discipline.

If all you care to do is build a single website to make a profit, then writing good code is not a high priority. In this case, a CS degree would not provide much benefit at all.

As a beginner, you simply are not going to be good. Accept this fact. It will make you less close minded to the more experienced devs you will be working with. An open mind will also make you more accepting of ideas that conflict with what you believe is best-practice.

If your goal is to just build a website, then signup at a community college for an intro to web programming course. Or, anything Javascript/HTML/pick your web language. These classes are meant to prepare you to do the basics of web work on the job. As I said in the beginning, Computer science is not meant for this type of training.

| improve this answer | |
  • 3
    The web evolve fast, most web related courses at colleges/universities are out dated and teach bad practices, take them with a grain of salt. – Raynos Oct 23 '11 at 18:48

Web development should not be considered separate from any other development. You need a quality foundation no matter what - data structures, imperative programming, object oriented programming, other types of languages, software engineering, and so on. You can then take courses that may be better geared toward web development.

If you were just learning on your own time, it might be worth learning specifically Python. Since you are asking about courses to take though, I would not waste your money on a course about a specific language. Once you have the theory down (as mentioned above), you will find it easy to learn Python, or any other language for that matter, on your own. Or, if you're feeling up to it, do both at once - take a class and learn Python in your spare time.

EDIT: You mentioned: OOP(with Java),Networks and Graphics,SE-Algorithms,Discrete Math for Comp.Scientists,Databases,Information Retrieval and Data Mining

I suggest this ordering:

1) OOP (if you know the basic concept already, can take later)

2) Discrete Math

3) Databases

4) Information Retrieval and Data Mining

5) Network and Graphics - that combination sounds strange to me, which makes me skeptical of the quality of the course. Read the course description.

6) Algorithms - requires Discrete & OOP (or some kind of programming) at the least. Check pre-reqs listed in course catalog if you haven't already.

EDIT2: I should say OOP could be taken after Discrete, but many students find Discrete Math difficult without an application for it in mind and OOP (or any other programming) will give you that application.

| improve this answer | |
  • SOLID! Let's discuss your answer further if you don't mind.Have you sorted the courses by importance or dificulty/pre-requisites?I have all famous Python books.Python is OOP.If I go through them all,can I skip the OOP with Java or OOP with C++ class?Also,there is some Stanford Database class at SEE db-class.org So I have time until the beginning of January to learn some courses on my own and take the rest if available at a college.What would you suggest? – Anton Oct 25 '11 at 19:44
  • I sorted it by what order I would find useful as a student, which should correspond with pre-reqs in most cases. I am finishing up my masters so this kind of thing is very fresh in my memory. Every school is different, so do check with yours. Actually - I think this nearly is the order in which I took these classes. – lampej Oct 25 '11 at 21:58
  • Learn OOP, period. Doesn't matter what language it's for. What I'm trying to get at is that if you learn something "for a language", you're learning more syntax than concept and that's not good. So assuming you understand my point, the rest is up to your preference. Regarding databases, I think it is very possible to learn that outside of a classroom, however you will understand it better after you get through Discrete Math. – lampej Oct 25 '11 at 22:00
  • @lampej, the value of OOP is grossly overrated. In fact it should be much further down on a list of things to learn. Probably, at the very bottom. – SK-logic Oct 26 '11 at 10:43
  • @SK-logic ,could you elaborate and make a new list with any course in a CS degree,ordered by magnitude of importance? – Anton Oct 26 '11 at 16:11

You should take Web Programming obviously. Also I'd recommend a course on Networking so that you understand the fundamentals of how the internet operates. I'd recommend at least one class on Human Computer Interaction and/or User Design. Classes on Data Mining are a good idea given the prominence of that field in modern Web Development. A class on Database theory would be useful for designing heavier web applications. A class in Data Visualization would probably also be useful to dealing with how to display data in a way that will be useful to users of the sites or web applications that you build. Some courses in Graphic Design and Media Analysis might also be useful. Some universities combine Computer Science with those disciplines into a degree typically called something like Interactive Design or Computational Media, essentially technology/art degree hybrids.

| improve this answer | |
  • 1
    When exactly "web programming" became a part of the Computer Science? – SK-logic Oct 24 '11 at 17:47
  • My program offers the class. It's considered a "fluff" class. – World Engineer Oct 24 '11 at 19:06
  • Thank you for the advice.That class isn't offered in the colleges I may be able to attend.Which course of the other ones you've mentioned do you think is harder to be self-thaught? – Anton Oct 24 '11 at 19:15
  • Data Mining is the hardest class on that list bar, then Databases or the Visualization class. Any of those can be fairly mathematically rigorous in the right hands. – World Engineer Oct 24 '11 at 19:18

May I suggest getting a bit beyond Django for a moment? How well do you know HTTP? How well do you know HTML? Have you considered how you'll handle graphics in this website? Do you know where you are going to host this web site? What domain name it'll have? There are probably a dozen more questions like this that I'd say are important things to consider here as Django alone isn't going to be a silver bullet.

Networks, databases, SE-Algorithms, OOP, and Discrete Math would all be areas I'd suggest as places to at least dip your toe and see what works and doesn't work for you. You may be surprised at just how much other stuff you have to know and handle to get a site up and running would be my guess. This is without considering things like social media integration as perhaps you'll want people to sign in with their Facebook or Twitter account rather than creating new accounts all over again.

I'm looking at this from the perspective that if your goal is to get a website you built using Python/Django up and running then there may well be things beyond just knowing Python/Django that can be useful here. The "program a website" could mean 1,001 different things as there are many different possible uses for a site. Do you plan on selling stuff from that site? Is it just a sandbox so you can learn the basics of a website? Is it for making your own Content Management System? What will the site do? Why would someone see the site? Have you pondered any Search Engine Optimization parts to this? To try to take everything but the Python/Django out of the equation here is a bit unrealistic, at least to my mind and so I'm wondering if you are seeing this from a broader perspective or are you wanting this to be where everything else is already handled so all you have to do is just one little thing. While it is possible in theory, you may be more than a little surprised as to how much you are expecting from the other person in this situation.

Take a look at the last story in The High-Security Interview, The PHP Candidate, and Overqualified if you want an example of where while you have a good idea, you have to be careful about how far do you take it and how dogmatic are you wanting to be about this.

| improve this answer | |
  • Thanks for the reply.Look at the beginning of my question.If you've read the whole initial post,I don't know on what are your assumptions based.I actually wrote before one girl edited my question that I realize the huge amount of work and time needed to learn all those things. – Anton Oct 24 '11 at 18:06
  • What the question is about is from a CS program,which courses are relevant web development?Obviously robotics for example is not – Anton Oct 24 '11 at 18:07
  • Thanks for replying again,JB King.If by dogmatic,you mean arrogant,I really didn't mean to,I apologize.I've done my research and I'm in the game for the long run.Even if all the ideas floating around in my head fail,if I acquire solid skills along the way,this would help me in other projects.But let's say,I follow up the advice: "Go to a top college,study hard on the side,get a MS,work for a few years and then think about starting your own business after 10 years.I don't think that's very good advice.I'm not making illusions that by the end of 2012 will be on the cover of Forbes – Anton Oct 24 '11 at 18:48
  • ...but have decided to put in the hours and will see how it will turn out.But I do believe that the dots will connect somehow.In the spirit of the story from the link you provided:"I was thinking about doing something like Facebook.Heard those make not bad money.I'm 19,Zuckerberg was 19 when he made it,if I only find some rich kids and get them Zucked...opportunism at its finest.Doing it big.Go big or go home" – Anton Oct 24 '11 at 18:57
  • Seriously speaking-my vision for the website is to be a CMS for a target audience.One of the main problems it will solve is helping people get laid.Helping in a subtle way of course.Also getting people away from the screens of the laptop/pc.It's an idea that isn't out there from what I've seen,and I have seen a lot.Which may mean lack of interest.I plan to later sell stuff on the site.Deisgn-minimalist!The way I plan to attract users is initially with content,SEO and some videos that will go "viral".If I utterly fail,I'll make sure to keep you guys posted,so you can have a nice laugh at least – Anton Oct 24 '11 at 19:08

For "Web Development" as such, I don't think there's a lot of courses in the standard set that are geared right toward that track. When talking about undergrad courses, you'll find that most of them geared to "Web" stuff will usually be very basic, and will border on clerical in their approach.

I would recommend that you split your time and take the of the foundational undergrad courses which will allow you to become a good programmer, while at the same time doing self-study on your own for the discipline of web programming. Buy a good book on CSS. Buy a good book on Javascript and HTML 5. Take Intro to CS, and, learn how to program in Java that way. Take a class on networking, with a focus on TCP/IP if at all possible.

But most importantly: Find a project you want to do, and start it. You seem to have an idea of what it is, so I would just say, "start it on your own, on your own PC". In the process of doing this, you won't learn everything you need to create a top-notch website, but you'll learn what it is that you really need to focus on in your self-study to do so. You'll make mistakes. You'll write terrible code. But that's OK. I'm willing to bet that once you are taking your courses, you'll be able to back-fill your knowledge and draw lines directly from your studies to your previous work.

| improve this answer | |
  • 1
    Networking can be a great help, and anything that deals with databases can be too, as most new web projects are almost certainly going to be dealing with a database. In my experience the CS database course was okay but mostly focused on logic (as if you didn't have other CS courses for that) but the business college's Relational Database Management Systems course was excellent and actually taught you like a DBA instead of a...CS student taking a single course on databases. – Ben Brocka Oct 23 '11 at 17:23
  • Thank you both.I do have access to a big collection of books,thanks to a friend of mine.Have added the courses to my list – Anton Oct 24 '11 at 19:18

Databases and SQL!

I don't believe you will find a web development job that doesn't involve them. Be able to write select, update, insert, and delete statements. Understand table normalization (which refers to not storing redundant data). Understand primary keys, foreign keys, check constraints, joins, subselects, group by, unions, indexes. Know how to write efficient queries. Know how to add indexes to make queries more efficient and when it will will slow down statements that write to the database.

If you want to go further, that is a good idea. Know how to create views, materialized views (if the db accepts them), stored procedures, how to configure a database to make hot back-ups, etc.

There is a lot of talk lately of "NoSQL" but be aware that the vast majority databases are still RDBMS. Furthermore, most web programming tends to be creating a web front end for a database. And even if you work with NoSQL databases, you will probably still work with RDBMS as wall. And frameworks like Hibernate that try to abstract away the databases, generally can't really work as well as you would hope.

| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.