in Search
Welcome to Neopoleon - Sign in | Join | Help
Navigation: Home | Forums | Galleries

Wanted: CS Know-it-all

Me:

An enthusiastic, but ignorant, chump who wants to learn a bit about CS. Recently convinced by one of Andy's comments over at Steve's site, I want to know what I'm missing.

However, I'm in a hurry, and I don't like learning things at the typical college pace. I also don't give a rat's ass about having the degree, so I'd rather avoid college altogether at this point.

I could learn from a book, but nothing beats human/human interaction.

You:

Someone who knows CS, and who has the communication skills to teach it. Being able to meet face-to-face would be nice, but videoconferencing with iSight/iChat would fine, and plain old email would work, too.

The idea:

You could assign reading and assignments at regular intervals. I'd do my best to do the work, and would pester you with questions when I had problems.

At other regular intervals, you could provide me with your own insight into a set of problems/concepts.

I don't care what platform is used for the lessons. I'm at home in Windows/*nix/Timex-Sinclair 1000 - it doesn't matter. The concepts are what I want.

The dough:

Depending on how things would take place, we could work out a pricing model that's either hourly or lumpy. I'm not loaded, but I'm not totally destitute, either.

If this sounds good, then just email me. Thanks.

Also, if anybody out there knows of anybody who'd be interested, do the Rodawgg a favor and pass it along, OK?

Published Monday, March 29, 2004 6:34 PM by Rory

Filed Under:

Comments

 

Mike Kozlowski said:

So... you're looking for a random person on the Web to act as a one-on-one CS professor? That seems unlikely to work really well.

But a bigger problem is: One of the best ways to drill concepts into your head is to make you do work with them. And big coding assignments -- particularly when you've got a full-time day job -- take time, to the point where trying to compress a typical CS class in any significant way is going to leave you scrambling desperately.

What you could do is look into various college's CS course-specific Web sites. A lot of times, they'll post a syllabus with a readling list, class notes, assignments, and eventual assignment solutions. If they also have a class mailing list with public archives, you can get a lot of the taking-the-class effect with no actual class-taking.
March 29, 2004 7:00 PM
 

Rory said:

Mike -

"So... you're looking for a random person on the Web to act as a one-on-one CS professor?"

Exactly.

"seems unlikely to work really well."

I like a challenge :)

"...big coding assignments -- particularly when you've got a full-time day job -- take time, to the point where trying to compress a typical CS class in any significant way is going to leave you scrambling desperately."

One of the nice things about working one-on-one with someone is that the schedule would be flexible. It's one of those "you get out of it what you put into it" situations, so it'd be up to me to keep the pace at a good level without drowning myself.

"What you could do is look into various college's CS course-specific Web sites."

I've done that, but I don't care for the lack of context. If I had a lot more time, it'd be OK because I could fill in the context for myself, but in the time it might take me to research *why* Concept X is important, another human being could explain it *and then some*.

So, in spite of the somewhat odd nature of what I've proposed here, I feel that the payoff would be good, and I'm willing to give it a shot...
March 29, 2004 7:05 PM
 

Mike Kozlowski said:

Well, fair enough.

Now, riddle me this: Why, when I hover above your comments in Firefox, do they disappear? Is this some insidious conspiracy to keep users of non-MS browsers from reading too closely?
March 29, 2004 7:12 PM
 

Jeremy Brayton said:

I took CS in college and I stopped going. One main reason was I couldn't handle 40+ hours of work + 12+ hours of school a week. The other main reason is I was being forced to buy software books I could buy on my own, and thus learn on my own.

I wouldn't have to pay to fail, I could pay for the same damned 60 dollar book retail (yes they give you NO damned discount either) and then learn on my own. No tests, no thousand bucks a class, just 60 dollars and my dignity.

If you want to know CS you basically just need to know what books to get. From there you learn CS a little better. I have all of my books still so I can find their upgraded counterparts if you'd like. They are old, pre '97, so some of the information is invalid. I think that if you at least get a good intro to CS book (like the one I have) you can THEN determine if you really want to learn CS. CS in the traditional college degree sense is a beast. There's a ton of information involved and you have to have some working knowledge of nearly every programming language out there, or at least the major ones. We learned Pascal, C, C++, Assembly, some Java, etc. My period was before .NET but I'm sure there would be a series of courses at my college now.

I'll post the list when I get home. I don't have the books here at work but I do have them all at my fingertips there. I'll try to search for any updated versions because I'm sure if these books are any good there have been changes.
March 29, 2004 7:16 PM
 

Mike Kozlowski said:

(Note: Theory in previous comment provided telepathically by Chris Anthony.)
March 29, 2004 7:16 PM
 

LarsBerg [MSFT] said:

If you want to pick up some additional tips in certain areas, you can also just hit some of the Masters courses at the University of Washington, one of which is taped each quarter and made available online:
http://www.cs.washington.edu/education/dl/course_index.html

I'm taking the program (physically for-degree, not remotely for-fun), and enjoying it quite a bit. You'll be able to pay significantly less than you otherwise might, and can easily "terminate the relationship".
March 29, 2004 7:25 PM
 

Haacked said:

Hey Rory, you might also consider MIT's Open Courseware project.

Essentially this gives you access to the course materials and notes the MIT profs use for their classes AND the price is right.

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/

Maybe consider doing this along with having a CS mentor.
March 29, 2004 7:38 PM
 

NJ John said:

I'm in the same boat, Rory. Very little *formal* CS training, but lots of practical experience.

I've started reading "Code" by Petzold to try and understand the nuts-n-bolts stuff. (in fact, I checked it out after you mentioned it during your first .Rocks appearance.) I'm also digging into the MSCD.Net study guides.
March 29, 2004 7:40 PM
 

Scott said:

MIT started up their OpenCourseware site two years ago. They just keep adding courses to it, it gets better and better.

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/index.htm

They include the professors reading lists, assignments, and syllabus.

Nice light reading. :)
March 29, 2004 8:04 PM
 

Scott said:

dammit, that's what I get for not reading ALL the comments before posting.
March 29, 2004 8:07 PM
 

TomB said:

Rory, perhaps when you find this person you could make her/him available in some sort of a forum environment.
You, NJ John, Jeremy Brayton and myself seem to be in a similar situation; which is, we don't have time to work on our full time jobs as well as put in ??? hours of college paced learning.
Usenet groups are handy when there's a specific problem to be resolved, but courseware is a little hard to find. Having someone give a little information, followed by some homework would be a great motivator.

March 29, 2004 8:13 PM
 

Josh said:

+1 for MIT OpenCourseware: college material at YOUR pace, not "typical college pace". Anything you have trouble grasping, just post, and I'm sure you'll have plenty of readers eager to show off their knowledge and help you learn for free!
March 29, 2004 8:32 PM
 

Andy said:

I do know a professor who was doing those MIT courses for free to online students like you are talking about. Through his web site. He even set up a secure login and had schedualed class times. Just to help developers get a leg up. Scheme was the language he was teaching in. However he stopped doing it for lack of participation. I have pointed him to your blog Rory and he said he'll take a look later on when he's done with his current project for the day. Can't promise anything but at least he'll take a look.
March 29, 2004 9:28 PM
 

Josh said:

--Andy,

If he starts this back up, I'd be willing to participate.
March 29, 2004 9:59 PM
 

Dan McGillen said:

As someone who *has* a CS degree, I'm struggling to fathom why you want to learn what I learned.

I have the slip of paper, but all college really did for me was kill my love of coding. Shortly before graduation, I abandoned all interest in coding for a living. Now, a year out of school, I do tech support. Perhaps this may just be the curriculum at my school, but essentially all we learned was theory with very little practical information.

The degree looks good on paper, but I don't feel like college made me a better programmer. (Unless you want me to write something that uses linked lists as a data structure from scratch in C++. We did that a lot.)

Only recently have I started to be interested in programming again. I'm not trying to discourage you from trying to learn what interests you, I'm just uncertain that pursuing college coursework independently is the best way to do it, since you don't get the ticket-punch of a degree at the end.

If Book-Learnin' is what you are after, I heartily recommend "The Art of Computer Programming" by Donald Knuth. Volumes 1-3 are available and I liked them better than any book we ever used in my classes. One of the few times I really connected with programming as a discipline was while reading random sections of these books. I didn't work through the exercises, but several of my peers agreed that the exercises were excellent. That plus a good data structures book, a good database book, and a good operating systems book would round you out and you'd have a decent library of CS knowledge to work through. I don't have any suggestions for those books, sadly, as the ones we used in class were not the greatest.

Whatever you do, good luck!
March 29, 2004 10:03 PM
 

Jeremy said:

I was going to mention MIT's OpenCourseware but I forgot the site. Thanks for reminding me of it.

There are very little 'text books' on CS meaning books you can only get at a school somewhere. 98% of all of the books used in a CS environment are all books you can buy online at amazon.com or a local Compusa or something.

CS 101 Book - An Invitation to Computer Science (G. Michael Schneider and Judith L. Gersting) ($55.35 New)
CS ?? Book - Operating System Concepts 5th Edition (Silberschatz, Galvin) ($58.70 New)

Out of about 4-5 books those 2 are the most useful today. This was one of the most recent books and later classes I attended so it's also probably the most relevant book out of all CS books I posess. There is an update here: http://cs-www.cs.yale.edu/homes/avi/os-book/osc/index.html.
It has model syllabi for ya which you may want to download to go over at your leisure. It was released in 2001 so it's fairly relevant if you want to know basic OS information.

An update to the CS book can be found here: http://www.course.com/catalog/product.cfm?isbn=0-534-39097-8. My version has Pascal as the language so C++ may be a little better. It's very basic CS stuff and gives a real overview of everything. Try to find it at say walmart or something and skim over it. You probably already know a lot of it but it's a very good overview of CS.

Here's a link of John Wiley and Son's Higher Education website: http://he-cda.wiley.com/WileyCDA/HigherEdCourse/cd-CX0000.html. It's a nice place to go for a list of books to look out for. They should all be available anywhere most likely or you could probably order them. Thats if you want to do it yourself. You could at least start on some entry level books to see if you're interested since CS is a vast bit of information.
March 29, 2004 10:10 PM
 

Carl Franklin said:

How about Scott Hanselman. He wrote an OS in C#. :-)
March 29, 2004 11:21 PM
 

Anonymous said:

At first I thought you were asking for a "CSS Know-it-all"

What about: http://www.aduni.org/
March 30, 2004 2:58 AM
 

GuyIncognito said:

At first I thought you were asking for a "CSS Know-it-all"

What about: http://www.aduni.org/
March 30, 2004 2:58 AM
 

Joe Duffy said:

One reason to get the piece of paper:

You can get your Masters, followed by your PhD, and then do cool research work for the rest of your life. You know: the whole uber-geek thing.

Of course my two sentence justification probably isn't enough to sway your opinion on a subject you've contemplated in great detail... but, hey... I'm silly like that.
March 30, 2004 3:40 AM
 

Have the degree, but don't know it all, yet said:

I'd say your best bet is to just buy the books, read them, do the exercises, and ask some CS know-it-alls when you're stuck.

Some theory of operating systems stuff is one of the more useful things you can learn, particularly because you'll learn about process/thread synchronization issues which do pop up in the real world.
Operating System Concepts - Silberschatz & Galvin
Modern Operating Systems - Tanenbaum

As far as CS theory stuff goes, discrete mathematics is the most useful topic, it's also worthwhile to know about big O notation to make informed decisions about algorithms so that your computations will finish within your lifetime, and finite automata (a.k.a. state machines) are worth knowing about. Odds are that you're already familiar with grammars and BNF just from reading books on various languages. I wouldn't spend a whole lot of time on the deeper topics like Turing machines, computation complexity, etc.
Discrete Mathematics - Johnsonbaugh
Data Structures and Algorithm Analysis in C++ - Weiss
Introduction to Languages and the Theory of Computation - Martin
Fundamentals of Algorithmics - Brassard & Bratley

To broaden your horizons, learn some other languages. More specifically, learn other programming styles besides the imperative programming and object-oriented programming that you're already familiar with. Try out functional programming with Lisp, Scheme, etc. and try out logic programming with Prolog. You'll probably continue to use the languages you already know in your real-world work, but experience with the others opens your mind to other problem solving strategies, which enables you to see more elegant ways of solving problems no matter what language you're using.
The Scheme Programming Language - Dybvig
Essentials of Programming Languages - Friedman, Wand, & Haynes

Some additional mathematics can be useful. I'd recommend a heavy dose of linear algebra, some probability and statistics, and signal theory.
Linear Algebra and Its Applications - Strang, this book is really top notch
A First Course in Probability - Ross
I can't really recommend a good statistics book. I didn't like the one from my college stats class. It just didn't have enough depth.
I also can't really recommend a good signals and systems book either because, unfortunately, I just didn't pay much attention in the one electrical engineering course I took. I thought, "When am I EVER going to use this crap?" The answer to that question is, a lot more often than I thought.

If you're interested in graphics, here are a couple of good titles:
Introduction to Computer Graphics - Foley, et al. This is pretty much the standard intro book and gets into all the nitty gritty details of scan line conversion, clipping algorithms, etc.
The Computer Image - Watt & Policarpo. This is more of a high-level overview of the field but still has a lot of depth in it's coverage of the material.
http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/notes.html - Another nice, in-depth treatment of the material.

If AI interests you, here are a couple of good books to get your feet wet:
Artificial Intelligence - Winston
An Introduction to Genetic Algorithms - Mitchell
Neural Networks: A Comprehensive Foundation - Haykin. This one is pretty math-intensive. Calculus and probability knowledge required.
March 30, 2004 5:06 AM
 

Chris Hanson said:

Here's the book to get: "Structure and Interpretation of Computer Programs" by Abelson, Sussman, and Sussman. It's the textbook for 6.001, the introductory computer science course at MIT. It's good for both classroom or self-directed learning. It uses Scheme, and teaches the basics of computation in a practical fashion.

It's online at MIT OpenCourseware http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Structure-and-Interpretation-of-Computer-ProgramsFall2002/CourseHome/index.htm or you can pick it up in print.
March 30, 2004 5:30 AM
 

Sven Groot said:

"Operating System Concepts - Silberschatz & Galvin"
I second that. It's the single best and most readable book I had for my CS study. A close second would be "Computer Networks" by Tanenbaum.

I'm a fourth year CS student and Leiden University (http://www.liacs.nl), but I don't have the time nor the didactic skills to teach you, so sorry!

Most of CS won't help your programming, anyway. CS is not about programming. At my Uni, there are some people who say "Computer Science" should actually be "Computing Science", because it's not really about computers. This is especially true if you follow the theoretical paths, which my Uni really emphasises. Courses like Continuous Mathematics, Discrete Mathematics, Numerical Mathematics, Linear Algebra, Theory of Concurrency, Formal Languages and Automata, Programming and Correctness (which isn't about getting your C++ programming right, it's about using formal algebraic rules to mathematically prove the correctness of a program) form the theoretic lines.

As I've done all the mandatory subjects (with the exception of Numerical Mathematics, because I suck at maths), I'm mainly doing seminars now. Those are the coolest. Just giving/listening to speeches and doing projects.

I gave a really cool talk about .Net for the Seminar Component Based Software Engineering! I first gave them some background, and then just fired up VS.NET and started coding. Blew them away, because most of them are only truly accustomed to C++ (still the language used most at my Uni, and the one taught in the first year), so they were really surprised at how easy and powerful it is. Got a 10 (out of 10) for that one!

But in summary, I have the know-how, but I don't think I'm the ideal person to teach you. I'm always willing to answer specific questions though.
March 30, 2004 11:25 AM
 

Craig said:

Might I suggest that whatever route you take to your enlightenment, that you do it out in public? For example, start a wiki and do all your learning there. With a reasonable amount of work, when you're done you'll have an artefact that others can use to achieve similar edification. Plus, you can draw on the collective expertise, rather than that of just one person.

Since I contribute to FlexWiki, I'll suggest that as a good engine. http://www.flexwiki.com.
March 30, 2004 1:54 PM
 

Josh Baltzell said:

That U of W stuff looks great, I am watching one of the videos from the newest one right now. It's hard to deny the power of video for learning. I don't understand the MIT stuff, is there no lecture? If so then where is it?
March 30, 2004 2:20 PM
 

Me said:

Computer Science is theory, there is little coding involved (if any). What everyone here is talking about is either an undergrad C.S./Info. Systems degree or a graduate Info. Systems degree. Core topics that fall under the heading of C.S.:

1. Design and Analysis of Algorithms (techniques to produce polynomial time algorithms including Greedy Methods, Dynamic Programming and Divide and Conquer - how to cope with NP-completeness with backtracking and approximation algorithms)

2. Theory of Computation (is the theory of what is computable and what is not computable under the Turing model of computation - often touches upon different models of computation and where they fall short, also basic complexity classes such as P and NP and 'completeness' within a complexity class)

3. Complexity Theory (this is the theory that deals with what is tractibly computable and what is intractibly computable - focuses in detail on time/space complexity classes and the relationships between them)

4. Automata Theory (detailed study of different models of computation: finite-state machines, pushdown automata and Turing Machines and the classes of languages that are computable within each)

I think that it's important to distinguish between Computer Science and Programming ... they are very different beasts. Some other topics that fall under Computer Science:

a. Cryptography (Number Theory and Public Key Cryptography, different secret key ciphers and techniques)

b. Quantum algorithms

c. Computational geometry

d. Logic (First order predicate with Godel's completeness theorem and second order with Godel's incompleteness theorem)

e. Parallel algorithms

f. Combinatorics and discrete mathematics
March 31, 2004 3:36 AM
 

Nasseam Elkarra said:

Looks like no one posted this link so here goes:
http://www.msdnaa.net/curriculum/repository.aspx

From the site:
"The objective of the curriculum repository is to freely provide easily accessible materials to bridge gaps that may exist between emerging technologies and higher education curriculum. Materials that include Microsoft technologies are collected, cataloged and made freely available for use by the worldwide academic community."
March 31, 2004 5:01 AM
 

Timmay said:

I saw the inconspicuous aduni.org post and took a look. It looks awesome. There is a full year's worth of advanced material available for download, or through buying an 80GB HD from them at cost (they claim $160, but I wonder if it's less now).

It was an MIT experiment put on by the ArsDigita folks. It claims it's post-BS work, but at least the first test for the Discrete Mathematics class looks like an intelligent person could complete it just using the lecture videos and book.

http://staging.aduni.org/drives/
March 31, 2004 10:37 PM
 

Ben Zamora said:

Berkeley has classes online as well. http://webcast.berkeley.edu/courses/index.html
CS 150 Components and Design Techniques for Digital Systems
CS 162 Operating Systems and System Programming
CS 3 Introduction to Symbolic Programming
CS 61A The Structure and Interpretation of Computer Programs
CS 61B Data Structures and Advanced Programming
CS 61C Machine Structures
There are other classes from previous semesters as well.
April 5, 2004 1:10 AM
 

TrackBack said:

Wanted: CS Know-it-all
March 29, 2004 7:42 PM
 

TrackBack said:

Wanted: CS Know-it-all
March 29, 2004 7:43 PM
 

TrackBack said:

Computer science: Just add water
April 10, 2004 6:36 PM
New Comments to this post are disabled

About Rory

I *own* this site, you loser.