Writing a report about Computer Science for school, looking for information



  • I am a college student finishing up my report for my English Business Milieu class (which is due the upcoming Friday), of choosing a problem that the college may have and writing a report on it for further study (I chose their Computer Science curriculum).

    I've already sent out similar letters to the chief editors and founder, and Alex suggested that I post here.

    I also work part-time as a programmer and enjoy reading The Daily WTF on a regular basis given how funny the horror stories in development can be, plus I also learn a bit more about information technology (IT) and I can also see what mistakes I should avoid when coding myself. I have already come up with a suggestion to cover source control further in-depth, as it does occasionally occur in the Feature Articles that a company/enterprise has a terrible method of managing their large projects.

    I've already asked other students in my program what they think about it, and also planned to ask here, as I can imagine some of you here do work in IT.

    For reference, here is the current CST program grid I'm analyzing; these are only the program specific courses:

    SEMESTER 1
    Mathematics I (general/computer-science related mathematics)
    Programming I (Java)
    Information Systems
    Introduction to Computer Science

    SEMESTER 2
    Mathematics II (Statistics/Probability)
    Business
    Programming II (Java, Object Oriented programming)
    Internet I (HTML, CSS)
    Introduction to UNIX

    SEMESTER 3
    Data Structure (using Java to make linked lists, binary search trees, etc.)
    Database I
    Operating Systems (Windows)
    Internet II (JavaScript, AJAX, jQuery, etc.)

    SEMESTER 4
    NET Programming (C++)
    Graphical & Wireless Programming (Android Application development)
    Systems Development
    Network I

    SEMESTER 5
    E-Commerce (large-scale projects that used ASP, JSP, and PHP)
    Database Tools (PL/SQL, Oracle ApEx)
    Advanced Network
    Program Modifications (modifying existing programs in C#)

    SEMESTER 6
    Psychology of the Workplace
    Advanced UNIX
    Stage (Internship)

    And based on the program grid I sent in, I also asked these quick questions, hoping to see what you guys think:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?
    2. From the program grid, are there any courses that could be removed/replaced?
    3. What material do you think is important that does not appear in the attached program grid?
    4. If you studied in CST, which courses do you remember having been the most helpful for you?

  • area_deu

    @joshtheskilledgamer said:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    Focus on the logic and the basics behind CS, not so much individual programming languages.
    See if you have a talent for it. If not, switch to something else early. There are parts of being a good developer that you can't learn, you just have to have them.

    2. From the program grid, are there any courses that could be removed/replaced?
    ASP, Advanced UNIX
    3. What material do you think is important that does not appear in the attached program grid?
    Unless covered in the various "programming" courses: Usability, User experience, performance, software architecture
    4. If you studied in CST, which courses do you remember having been the most helpful for you?
    I only remember the least useful: Mathematics.


  • @joshtheskilledgamer said:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    @joshtheskilledgamer said:

    Stage (Internship)

    Seriously. A month in a company is worth more than a year on an uni.

    Other than that, if you're aiming for a programmer's job and don't have it in plans to stay on the uni and, say, do a doctorate - definitely pay attention to things like E-Commerce, Psychology of the Workspace and other topics that aren't strictly writing code. Writing code and learning your 20th programming language is easy. Handling business and non-functional requirements, sane management of business processes, making your code clean and maintainable - that's not.

    Of course, that's just going by names. Take it with a grain of salt - this semester I'm doing a course named "Project Management", which should be the most useful thing on the whole damn uni, but it's actually worthless.

    @joshtheskilledgamer said:

    From the program grid, are there any courses that could be removed/replaced?

    Yeah, fuck advanced UNIX. Also, .NET programming in C++? Jesus. I'd cut ApEx too, but you'll need the other part of that course.

    @joshtheskilledgamer said:

    What material do you think is important that does not appear in the attached program grid?

    As I've said, I don't see a course that would be focused on things like maintainability, source control, and other such quasi-managment problems that you will encounter.

    Also, you don't seem to have any low-level/embedded programming course - not a must in today's world, but it's fun to at least try.



  • Missing: some business courses, like:

    • Introduction to Accounting (learning about interest rates, future vs. present value, amort calc)
    • Business Communication. The difference between an formal and casual email. Appropriate language in the workplace. Different types of documentation. So many people in the workplace don't know how to write a memo!
    • Intro to Project Management - Timelines, milestones, critical path, etc. How not to create and follow schedules and not fuck everyone up.
    • Software Development Life cycle - Probably requires Intro to PM as a pre-req. How to actually see software from start (planning) through dev, qa, implementation, support. Go over various SDLC methodologies, like waterfall vs. agaile.
    • Testing 101 - At least go over what the fuck testing is, since most devs I've met don't have a clue. Smoke test vs. feature test vs. integration test vs. unit test vs. regression test. What is an automated test?
    • Intro to UI/UX: As mentioned above. But learning about things like response and lag. Color blindness. How to measure how "good" UI is. Learning about the psychology of colors. Learning about how long it actually takes to move one's eyes from one part of the screen to another. Non-visual feedback (haptic, sound, etc). Permanence. Information overload.
    • Build a Fucking Project 502: A top-level course. Join a team. Pick a project. Fucking build it. But you'll need to set a schedule and take turns being the PM and communicate with 'the client' (the prof). Fucking build it.

  • I survived the hour long Uno hand

    @Lorne_Kates said:

    Testing 101 - At least go over what the fuck testing is, since most devs I've met don't have a clue. Smoke test vs. feature test vs. integration test vs. unit test vs. regression test. What is an automated test?

    This was going to be my suggestion.

    I had a Human-Computer Interaction course that focused on UX and usability that was super useful. It also taught us how to run a usability study, which was great.


  • Winner of the 2016 Presidential Election

    @joshtheskilledgamer said:

    1. From the program grid, are there any courses that could be removed/replaced?

    I don't see the point of courses that only teach a certain (programming) environment, so:

    • Advanced UNIX
      -> I highly doubt system administration can be taught in a class, if that's what this course intends to do.
    • NET Programming
      -> Do a low-level programming course instead if you want to teach them C++
    • Graphical & Wireless Programming (Android Application development)
      -> Teach them either UI/UX from a general point of view or OpenGL instead

    In general, don't teach them programming languages or specific environments, but give them the tools to understand any new programming language/environment they might encounter and use one specific language as an example.

    @joshtheskilledgamer said:

    2.Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    Data structures, Operating Systems, Networking

    ...because you don't learn that stuff on the job and it's important for actually understanding computer programs.

    Database, OOP, some Web development

    ...because those are the most relevant skills.

    @joshtheskilledgamer said:

    3. What material do you think is important that does not appear in the attached program grid?

    I'll just quote the best suggestions other people have made:

    @Lorne_Kates said:

    Intro to Project Management - Timelines, milestones, critical path, etc. How not to create and follow schedules and not fuck everyone up.

    Software Development Life cycle - Probably requires Intro to PM as a pre-req. How to actually see software from start (planning) through dev, qa, implementation, support. Go over various SDLC methodologies, like waterfall vs. agaile.

    I think that's one course, but a very useful one.

    Edit: Now that I think about it, the Systems Development course might already cover that.

    @Lorne_Kates said:

    Build a Fucking Project 502: A top-level course. Join a team. Pick a project. Fucking build it. But you'll need to set a schedule and take turns being the PM and communicate with 'the client' (the prof). Fucking build it.

    @Lorne_Kates said:

    Testing 101 - At least go over what the fuck testing is, since most devs I've met don't have a clue. Smoke test vs. feature test vs. integration test vs. unit test vs. regression test. What is an automated test?

    Can be combined as well: Form groups, give them something they have to build all by themselves. Focus on project management, communication with the client and testing. Maybe even require them to do TDD.

    @Maciejasjmj said:

    Also, you don't seem to have any low-level/embedded programming course - not a must in today's world, but it's fun to at least try.

    Yeah, that's definitely missing. Benchmarking and writing performant programs is impossible without knowing how the hardware works. And you only learn that by practicing low-level programming (maybe even teach some assembly).

    The low-level programming course should definitely include an introduction to benchmarking/profiling/performance optimization as well. Most people don't know how to do that properly.

    Also, last but not least, I'm missing a course on different (parallel) programming paradigms (see below).

    @joshtheskilledgamer said:

    4. If you studied in CST, which courses do you remember having been the most helpful for you?

    • The Operating Systems course (teaching us how interrupts, scheduling and file systems work), because I felt like it finally made "click" in my head and I suddenly understood everything that was going on inside my computer.
    • An Object Oriented Programming course I once took, which both focused on proper design and patterns vs. antipatterns and how object oriented languages actually implement virtual function calls etc. I think it also taught us a bit about how the JVM works, which was pretty useful, but kinda didn't fit in there.
    • One course, whose name I don't remember, which taught us about all different kinds of languages and the different paradigms (pure functional, object oriented, logic programming). The course also covered parallel programming (OpenMP, MPI, language support in the common languages).
      People need to learn how that stuff works, it's becoming increasingly important (both parallel programming (obviously) and functional programming, as its concepts are being introduced into mainstream languages). Also broadens your horizon and gives you the tools to understand any new programming language you might encounter.
    • The Software Architecture course. Not because of the lectures, those were boring. But as a practical exercise, they gave us an old, broken program, told us to import it into source control, write some tests for it, fix a few bugs, refactor a bit and implement a new feature. That taught me more relevant skills than everything else combined, especially reading someone else's (horrible) code and debugging.

  • Winner of the 2016 Presidential Election

    Phew, that's a huge wall of text. I hope it's helpful and not too detailed.


  • Winner of the 2016 Presidential Election

    Oh, and although it doesn't fit into the questionnaire: I hope you're teaching your students how a debugger works and what conditional breakpoints are. Every time I see someone insert printf()s into his code, I die a little inside. It seems like at least 50% of the professional programmers I know were never taught how to use a debugger and how much time it can save you!



  • @joshtheskilledgamer said:

    Psychology of the Workplace
    Probably of no use to you. Having good instincts for sensing and ducking on coming shitstorms will help you more. Learn by trolling your friends and diffusing the situation. Also save every email from everyone and insist on a paper trail for everything that you do. Never reply to an email you're CC'd or BCC'd on unless someone is trying to drop you in it. Verbal agreements mean fuck all especially when someone is trying to fuck you.

    @joshtheskilledgamer said:

    NET Programming (C++)
    is that dotNet? if you like doing that more then you can probably forget all about Unix and its derivatives. It's unlikely you'll end up in mono.

    @joshtheskilledgamer said:

    Internet I + II
    If you find you prefer the development side you'll probably want to drop them in favor of learning more about source control and unit testing.

    @joshtheskilledgamer said:

    Stage (Internship)
    Try and get as much of this as you can. It looks better on your CV and as others have said a month of work is worth a year of college.

    @joshtheskilledgamer said:

    Advanced Network
    I have my doubts about this. I've never had to delve into the OSI model outside of college but I'm a Java developer so...

    Things that are obviously missing.
    Source control : you've spotted this. GIT unfortunately is becoming a standard so start there. If you master git you and you're not broken by it you can probably master anything.
    Team projects : you have learn that some people are just Wally's and you have to learn to work around them.
    Unit Tests : YOU WILL LEARN HOW TO DO THIS, MAINTAIN THEM AND LIKE IT. Seriously testing is important and helps keep the wolves from the door.
    Build and Deployment : you will never avoid this no matter how hard you try.
    Specialize : Choose a stack and specialize in it. Knowing a smattering of everything is less useful than being the expert on C# or Java.
    More data persistence : xml,json, binary or what ever cuntflappery is now the cool thing to do.
    Multi-threading : you will never avoid this. learn to do it right and for the love of fuck look for a well maintained library before writing your producer and consumer library.
    Patterns : mostly asked in interviews. Buy a nice big book of patterns. Learn about them and spend the next couple decades beating people with that nice big book of patterns.
    Keep reading books. Moving to java 8. Read about the new features from a book. Spring looks nice. Read a well documented book. Online tutorials are too limited and rarely have any real world bearing.
    Google-Fu!

    Always remember that you're using technology to solve a problem not finding a problem for technology to solve. There are a lot of rabbit holes and finding non-existent problems to apply something shiny to is the biggest invisible one.

    One last piece of advice. Always ask questions. If something isn't crystal clear and unambiguous then ask questions until this is remedied. Yes you will feel silly but my fucking christ that is nothing compared to the shit storm you'll be in when you've made a bad assumption and the wolves are at the door.



  • @joshtheskilledgamer said:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    I'm not gonna lie and say I read the whole list.

    Back when I went to college, the only thing they taught me that was useful in pursuing a career in Computer Science was SQL/ACID/Data Normalization. All other useful skills I learned on my own.

    @joshtheskilledgamer said:

    2. From the program grid, are there any courses that could be removed/replaced?

    @joshtheskilledgamer said:

    Introduction to UNIX

    @joshtheskilledgamer said:

    Advanced UNIX

    Assuming this literally means "UNIX", then definitely erase them. Even if they actually mean, "Linux or BSD I guess using Bash?" then still definitely erase them. Teaches the exact opposite of what students should be doing.

    @joshtheskilledgamer said:

    NET Programming (C++)

    C++ strikes me as too low level for network programming, but I don't know exactly what the course covers, so I may be wrong? Still, keep in mind that any class taught with C++ as the language is going to be 75% about the foibles of that crummy language and only 25% about the thing the class is actually supposed to be teaching.

    One thing I had to suffer with but your program seems to do correctly: requiring super-advanced math courses to get a CS degree. Calculus isn't computer science, it's not useful for computer science unless you happen to be using a computer to solve some problem involving Calculus. (I think our profs fantasized that every student would go directly to NASA and start orbit calculation software projects.) If your CS course requires a high grade in Calculus to pass, you will be passing-over a huge number of talented programmers.

    As I've argued many times, IF and this is a HUGE IF computer science courses are going to teach concepts related to a specific problem domain instead of computer science, they should be teaching Double-Entry Accounting and GAAP. Because 1% of those guys are going to move on to NASA, but probably 60-70% of them are going to write software that deals with money.

    @joshtheskilledgamer said:

    3. What material do you think is important that does not appear in the attached program grid?

    One you already mentioned: working in a team, using source control. I'd also like to see some basic familiarity with software development methodology, so when you go to your first job you're not mystified with jargon terms like "spike" or "time-box".

    @joshtheskilledgamer said:

    4. If you studied in CST, which courses do you remember having been the most helpful for you?

    As previously stated.



  • Needs more "Error Messages 504"



  • @joshtheskilledgamer said:

    If you studied in CST, which courses do you remember having been the most helpful for you?

    I'm currently in a Software Engineering Master's program. From my undergraduate eduaction the most useful classes were:

    (1) Database design and development / Data mining - Extremely useful considering I am now a full stack developer and spend about 80% of my time dealing with data. If you're planning on being a developer, learn to love data and how it is managed.

    (2) Capstone Experience / Project Management - Besides actually gettting used to algorithms and how to code, you need to learn how to work well with people / communicate. A project management class would hopefully expose you to how real world projects get done. This class should cover both basic concepts of waterfall and agile (as a philosophy, not a practice), possibly discussing an implementation of agile.

    My current curriculum is covering things that I also find completely invaluable:
    (1) Data modelling
    (2) Software Architecture, Scalability and Availability
    (3) Modelling and Verification of Software
    (4) Project Management
    (5) Electives .... (Embedded engineering and Big Data)

    That is just a selection of the classes I've taken / am taking, but they have been the most useful out of all the classes I have taken.

    @DogsB said:

    <... BLOCK OF "MISSING THINGS" ...>

    None of these should be covered in an individual class, and will most likely be covered in the other topics.

    I may also be biased, stupid, etc... but I also believe a solid foundation in Computer Architecture (Van Nuemann architecture) along with some history of computing (Zuse, Turing, etc) and early coding practices (Assembly) is paramount in appreciating coding practices of today. This allows students to understand the architecture of the machine they are building on, and better understand WHAT their languages are doing.



  • @joshtheskilledgamer said:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    I'm seeing your traditional lineup, which is a complete misunderstanding of actual Computer Science.

    I see no discrete logic, no information systems, no generic classes that cover how systems are built and the landmines involved.

    Sure you have a "database" class, but it's tailored to tools and technology.

    Likely some of these are outdated and don't even reference modern libraries KOJavascript, which would be useful if you actually wanted to learn how Javascript is really used, as opposed to just using it vanilla.

    .Net Programming (C++)

    ???

    In short, this looks more like a technical school than a college degree.

    @joshtheskilledgamer said:

    From the program grid, are there any courses that could be removed/replaced?

    Yeah, all of them.

    No math, no science, no relationship of computing to math or science.

    Again, this isn't a computer science degree at all. It's an IT degree.

    @joshtheskilledgamer said:

    What material do you think is important that does not appear in the attached program grid?

    Discrete logic, at least an advanced math. Most of the classes should be switched to electives. Specific tech classes should end by second year.

    Some general UI class, because there are too many UI mistakes by early professionals.

    Some class related to design patterns that's modern and up to date.

    A real .net language.

    @joshtheskilledgamer said:

    If you studied in CST, which courses do you remember having been the most helpful for you?

    Programming Design. (up to date design pattern class and UML)
    Assembly language class.
    Calculus and Math proofs (for offering problem solving)
    Discrete math/systems (for logic programming)
    And there was a class on State Machines that's useful right now for me, since some of our systems rely on using state machine like logic to support two-way state based communication.

    @Lorne_Kates said:

    Introduction to Accounting

    That should be handled by creating a hybrid degree system, where Computer Science degrees have to minor in another business related subject.

    @Lorne_Kates said:

    Intro to Project Management

    This....

    And how forecasting and estimation work.

    Hell, I'd even take a class on agile.

    @Lorne_Kates said:

    Testing 101

    A class on TDD would be awesome.

    @Lorne_Kates said:

    Build a Fucking Project 502

    That should be senior project.

    Preferably it goes to a business in the community.



  • Degree should be renamed to "Tour in programming languages" instead of Computer Science.



  • @blakeyrat said:

    If you studied in CST, which courses do you remember having been the most helpful for you?

    Actually. Let me amend that.

    Two things I didn't think of right away:

    1. Usability. This should be a practical course where students are AT THE VERY LEAST required to develop an application, and do at least 2 rounds of user testing with other (non-CS) students. Maybe the first round could be a simple hallway usability test, or a flash card test, and the second could be a whole videotaped she-bang test, but for God's sake students need to learn usability!

    2. History. The history of computers, start from scratch, work your way through everything in the past, explain how things are the way they are. CS keeps reinventing bullshit ideas that were rejected decades ago (for example, skeuomorphic interfaces) because nobody writing software learns anything at all about the history of software. Students should be required to use (in a VM/emulator) several old systems to complete assignments-- maybe a C-64, then DOS, then a Macintosh System 6, then a 1995-era Windows. Maybe Amiga, BeOS, OS/2 there's a lot of possibilities here. Students shouldn't just be shown these machines on a projector, they should have to use the system to complete an assignment.



  • @Maciejasjmj said:

    Also, .NET programming in C++? Jesus.

    There's no dot, I think that means network programming in C++. Possibly building a TCP/IP stack? Not sure.

    No matter what kind of network programming you're doing, C++ is not a great language for teaching it. It's not a great language for teaching anything except, "what kind of annoyances do I have to put up with to complete a project in C++?"



  • @asdf said:

    Oh, and although it doesn't fit into the questionnaire: I hope you're teaching your students how a debugger works and what conditional breakpoints are. Every time I see someone insert printf()s into his code, I die a little inside. It seems like at least 50% of the professional programmers I know were never taught how to use a debugger and how much time it can save you!

    + 50,000,000,000,000,000,000



  • @lesniakbj said:

    None of these should be covered in an individual class, and will most likely be covered in the other topics.
    yeah 2 hours of class time and prep for an exam question in each really thought me about the horrors that awaited me in those areas.

    About the history and assembly I don't think you're stupid but I think those are only interesting after the fact. College should be about giving them the poor bastards the best possible leg up for entering the profession.



  • @DogsB said:

    Source control : you've spotted this. GIT unfortunately is becoming a standard so start there. If you master git you and you're not broken by it you can probably master anything.

    While I (sadly) agree Git should be taught, I sure hope to hell and back that whoever teaches it emphases that it's a poorly-designed program that should not be used as an example of... pretty much anything.



  • @joshtheskilledgamer said:

    And based on the program grid I sent in, I also asked these quick questions, hoping to see what you guys think:1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?2. From the program grid, are there any courses that could be removed/replaced?3. What material do you think is important that does not appear in the attached program grid?4. If you studied in CST, which courses do you remember having been the most helpful for you?

    1.) The ONLY jobs in IT/Computer science that ACTUALLY use advanced mathematics/physics or frankly anything else that isn't programming, databases, and the software development process, are military/engineering and government related. And except for some engineering/government positions, those people aren't recruiting from anywhere other than MIT/Stanford/Harvard/etc. Having a general understanding of high levels of math and science are fine for proving that one has what it takes to be an engineer, but the odds of that information actually being used post collage approach the limit as it heads to zero almost immediately. Same goes for all of the computing theory classes they make you take. 99.999999999% of people in the programs are NEVER going to make their own compiler, or language, or whatever.
    2.) Business class will be absolutely fucking useless to a STEM major person, and they will want to murder everyone in those classes around them. Data structures the way you describe it is useless, NOBODY uses linked lists, or implements their own binary search trees these days, except for VERY RARE cases. All that shit is baked into the platforms/libraries these days. Nobody wants to keep re-inventing the wheel. Operating systems as a practical or theory class can also die in a fire. As can network programming in C++ (hi, it is the 21st century, nobody does this any more with C++). Advanced Networking should be taught as an overview class, not a hands-on class. Programmers are not Network Engineers. And IT people who want to be Network Engineers get MIS degrees, or go to IT-T Tech, or get no degree at all. Making the networking stuff hands-on, is ridiculous, unless you are just covering surface level stuff (how ping works, tracing a route, that sort of thing). Psychology has NO PLACE in a STEM major's required courses.

    3.) You are hitting the right notes: modern languages, covering web and e-commerce (which I hope includes security). You need to hit things like requirements gathering, design, revision, documentation, working on large scale projects, security, and common programming tasks and assignments. You can cover all that in the classes listed.

    4.) Only 3 classes ever taught me anything I use in my professional practice: databases levels 1 and 2 (I had never even heard of a stored procedure before those classes), and my computer security elective class. Everything else was garbage and a waste of my time. Especially the theory classes and the advanced math and science classes and networking/circuit design classes I had to take (anyone want to see my working LogicWorks project of a completed fully functional CPU that implements all of the common parts of a CPU's logic and gates that I built from scratch, that I will NEVER USE FOR ANY REASON?!)

    No, I'm not bitter, why do you ask? 😃



  • @joshtheskilledgamer said:

    1. Which of the above topics would be the most valuable for pursuing a career in Computer Science/IT?

    Program Modifications. This is almost 50% of programmer's work. And 99% of work that's related to code.

    @joshtheskilledgamer said:

    2. From the program grid, are there any courses that could be removed/replaced?

    .NET Programming (C++). It should be either .NET, or C++.

    @joshtheskilledgamer said:

    4. If you studied in CST, which courses do you remember having been the most helpful for you?

    I'm midway through 3rd (out of 7 or 8, don't remember) semester, and I have yet to learn anything even remotely useful to my job.



  • @lesniakbj said:

    Big Data

    This should include a few lectures on when not to use Big Data compared to a statistical approach-- in my career, about 40-50% of the time I see a company implementing some hugely expensive Big Data approach, they could have simply implemented a statistical approach and gotten the same answers in a small fraction of the time.

    Kind of a pet peeve of mine, but. Still.


  • Winner of the 2016 Presidential Election

    @xaade said:

    In short, this looks more like a technical school than a college degree.

    Yeah, that was my first impression as well.

    @xaade said:

    Discrete math

    Disagree

    @xaade said:

    And how forecasting and estimation work.

    100% agree. Statistics is the most useful kind of math for computer scientists (apart from basic linear algebra) and sadly, I don't even know half of the stuff I'd like to know. It was basically not part of my CS curriculum at all (there was only a very basic class which only repeated high school statistics).

    @Vaire said:

    Business class will be absolutely fucking useless to a STEM major person, and they will want to murder everyone in those classes around them.

    While the second part is true, the first part is bullshit.

    @Vaire said:

    Data structures the way you describe it is useless, NOBODY uses linked lists, or implements their own binary search trees these days, except for VERY RARE cases.

    Well, it doesn't hurt to have implemented them and you definitely need to learn about the advantages/disadvantages of different data structures, Big-O notation etc.

    @Vaire said:

    Operating systems as a practical or theory class can also die in a fire.

    I've just decided that I don't like you. At all. Also, you're wrong.



  • @blakeyrat said:

    This should include a few lectures on when not to use Big Data compared to a statistical approach-- in my career, about 40-50% of the time I see a company implementing some hugely expensive Big Data approach, they could have simply implemented a statistical approach and gotten the same answers in a small fraction of the time.

    Don't disagree one bit. Everyone is gravitating toward the next buzzword (Big Data), and willing to forego a simpler and most likely more correct implementation.

    I would imagine a Big Data class to cover some of these things, but then again....

    @Vaire said:

    Business class will be absolutely fucking useless to a STEM major person

    What are you talking about? Those are some of the most useful to someone in STEM, because they actually have to learn how to interact with other members of a project team, learn how projects are managed, etc.

    They aren't just gonna be given requirements and told "Hey go code this". There will be business interaction, and it is definitely useful to understand how business politics work.

    They may hate it, but saying business classes are useless is extremely narrow sighted...



  • @asdf said:

    While the second part is true, the first part is bullshit.

    Oh, screw you. I DEFY YOU to show me proof of ANYONE who received their degree in COMPUTER SCIENCE who took a business class that IN ANY WAY prepared them for the fuckery that is the real world. Go on, I'm waiting 😛


  • Winner of the 2016 Presidential Election

    @Vaire said:

    Oh, screw you. I DEFY YOU to show me proof of ANYONE who received their degree in COMPUTER SCIENCE who took a business class that IN ANY WAY prepared them for the fuckery that is the real world. Go on, I'm waiting 😛

    I took two accounting and two marketing classes. Both proved very useful in the small company I worked in.



  • @Gaska said:

    .NET Programming (C++). It should be either .NET, or C++.

    Ok, there's no dot guys.

    I'm not going to pretend I'm 100% sure what this means, either. And I know it's (kind of) possible to write .net code in C++. But assuming that's what that line-item means is just an assumption.



  • @asdf said:

    Well, it doesn't hurt to have implemented them and you definitely need to learn about the advantages/disadvantages of different data structures, Big-O notation etc.

    I've just decided that I don't like you. At all. Also, you're wrong.

    No, no they don't. Again, I DEFY YOU to prove to me that ANYONE NEEDS to know about that stuff.

    I don't care if you like me. Today I am fleeing the great Fucks Famine of 2015 😉



  • @lesniakbj said:

    What are you talking about? Those are some of the most useful to someone in STEM, because they actually have to learn how to interact with other members of a project team, learn how projects are managed, etc.

    They aren't just gonna be given requirements and told "Hey go code this". There will be business interaction, and it is definitely useful to understand how business politics work.

    They may hate it, but saying business classes are useless is extremely narrow sighted...

    You are correct. But college isn't going to teach them this. The ONLY way college could teach them this, is if they ACTUALLY brought in ACTUAL business/sales people, who behave like they ACTUALLY behave in the real world, and made the class work on a project via interacting with them.

    Side note, I would buy tickets and popcorn to watch that actually happen 😄



  • @blakeyrat said:

    Ok, there's no dot guys.

    But it's capitalized. What do you think is more probable - they forgot a dot at the beginning, or they capitalized the entirety of common word, and they even used a wrong one?

    But even if it's a case, teaching web or network programming in C++ is a bad idea too.



  • @Vaire said:

    You are correct. But college isn't going to teach them this. The ONLY way college could teach them this, is if they ACTUALLY brought in ACTUAL business/sales people, who behave like they ACTUALLY behave in the real world, and made the class work on a project via interacting with them.

    Side note, I would buy tickets and popcorn to watch that actually happen 😄

    Agreed. I dare say a project management can't hurt though.

    I'll get the popcorn ready though, as that would be a treat to watch; poor students wondering why they can't get anything useful done.



  • @asdf said:

    I took two accounting and two marketing classes. Both proved very useful in the small company I worked in.

    [blakeyrant] Not proof, anecdote 😉 [/blakeyrant]



  • @Vaire said:

    Data structures the way you describe it is useless, NOBODY uses linked lists, or implements their own binary search trees these days, except for VERY RARE cases.
    I disagree on this point. They're good exercises at this point in his education. The skills picked up thinking them out and debugging them will prove invaluable and probably make or break him. As you said though. 99.99999% of the time the standard libraries will prove sufficient outside this setting. Btw I use linked lists regularly.



  • @asdf said:

    Disagree

    Ok?

    What's your definition of discrete math?



  • @DogsB said:

    I disagree on this point.

    At that point, neither is a search or sort algorithm useful.

    However, all of those things should be done with by the end of the second year.


  • Winner of the 2016 Presidential Election

    @Vaire said:

    No, no they don't. Again, I DEFY YOU to prove to me that ANYONE NEEDS to know about that stuff.

    • Algorithms and data structures: I've seen a lot of people who are too dumb to comprehend why they shouldn't implement Bubblesort themselves. Also, how the fuck are you supposed to understand databases (esp. what and index is and when they are a good idea) or anything about program performance at all without having been taught at least the very basics?
    • Also, someone writes those libraries. CS classes should at least teach you the very basics to prepare you for such a task. I thought I'd never have to do that, either, and yet here I am, having recently written a library implementing stuff like sorting on a specialized data structure.
    • Operating systems: Again, you will never truly understand multi-threading or the performance characteristics of a certain program if you don't know what interrupts are, how scheduling works etc. Basically, without an OS class, you don't know shit about computers at all.

    Basically, I have the general feeling that most professional programmers don't know enough about using the correct data structures, algorithms, how to profile their applications and how to avoid even having to profile or optimize your application by not writing shitty, naive code in the first place.



  • @Gaska said:

    But it's capitalized. What do you think is more probable - they forgot a dot at the beginning, or they capitalized the entirety of common word, and they even used a wrong one?

    I'm not saying it's a WRONG assumption, I'm saying it's an assumption and you should probably acknowledge that before you speak "authoritatively" about it.

    @Gaska said:

    But even if it's a case, teaching web or network programming in C++ is a bad idea too.

    Well I'd hope everybody agrees there.


  • Winner of the 2016 Presidential Election

    @xaade said:

    Ok?

    What's your definition of discrete math?

    I was thinking about set theory (useless) and advanced algebra (useless unless you want to become a cryptography expert), but since "discrete maths" includes stuff like graph theory and combinatorics as well, I hereby retract my previous statement.



  • @xaade said:

    At that point, neither is a search or sort algorithm useful.
    ah I remember my first and only bubble sort. That third variable. In hindsight the most retarded 30 minutes of my life.

    In my limited working career I've run into more experienced professionals that still don't know to not rewrite ArrayList.



  • @asdf said:

    I was thinking about set theory (useless)

    Wow I disagree with that.

    Set theory is the foundation of the SQL class many people in this thread have mentioned as being extremely useful to them.



  • @asdf said:

    graph theory

    And logic, and pathfinding, and state.

    You can't also discount the usefulness of advanced math classes to promote solving problem thinking and stretching the brain.

    I find those things to be invaluable, even though I haven't necessarily used the exact topic since I passed those classes.

    Math proofs are invaluable in developing the type of mind that thinks in TDD.

    Prove it works for value 1, prove it works for value n, prove it works for value n+1.

    Invaluable for unit testing design.


  • Winner of the 2016 Presidential Election

    Hm, any database class would teach you everything you need to know about set theory to understand relational algebra and SQL. The rest is useless IMO, so there should not be a maths class for that.


  • Winner of the 2016 Presidential Election

    @xaade said:

    Math proofs are invaluable

    True, but those calculus courses most CS students have to pass are still ridiculous. There is so much more useful math you could teach to CS students instead, like advanced statistics.



  • @asdf said:

    CS students have to pass are still ridiculous

    You miss out that CS is not just a programming degree.

    You could just as easily write lab software in R.



  • @asdf said:

    I was thinking about set theory (useless)

    Uhhh do you do any work with Relational Databases? Set Theory is the foundation for understanding how basic queries are transformed and run. Pretty useful stuff for constructing complex Intersect/Except queries, even more useful when modelling relationships in data.

    More useful from a Data Modelers than an SQL Developers perspective, but understanding how data belongs to certain sets/subsets/supersets really helps with data organization, composition and relationships.



  • @Vaire said:

    The ONLY jobs in IT/Computer science that ACTUALLY use advanced mathematics/physics or frankly anything else that isn't programming, databases, and the software development process, are military/engineering and government relate

    Bah. All of programming uses advanced math. It's just all abstract.



  • @asdf said:

    Algorithms and data structures: I've seen a lot of people who are too dumb to comprehend why they shouldn't implement Bubblesort themselves.

    I wonder if they would insist on it as much if they WEREN'T taught at school how to implement them, and were told to always use the standard library.

    @asdf said:

    Also, how the fuck are you supposed to understand databases (esp. what and index is and when they are a good idea) or anything about program performance at all without having been taught at least the very basics?

    How are they supposed to learn anything about performance if no one ever says that everything they did the entire year is horribly suboptimal and shouldn't ever, ever, EVER actually do any of this stuff in actual code?

    @asdf said:

    Also, someone writes those libraries. CS classes should at least teach you the very basics to prepare you for such a task.

    Someone writes device drivers too. Do you think every CS graduate should know at least the very basics of writing device drivers so they're prepared for such a task?

    @asdf said:

    I thought I'd never have to do that, either, and yet here I am, having recently written a library implementing stuff like sorting on a specialized data structure.

    And I bet that everything you have to know to accomplish it was entirely self-taught (or taught on the job) and you use literally none of the knowledge you acquired from AaDS classes.

    @asdf said:

    Operating systems: Again, you will never truly understand multi-threading or the performance characteristics of a certain program if you don't know what interrupts are, how scheduling works etc.

    And if I "truly understand" it, it helps me write my spreadsheet application... how exactly?

    @asdf said:

    Basically, without an OS class, you don't know shit about computers at all.

    I don't know shit about toilets, yet I can still take dump just fine TYVM.


  • Winner of the 2016 Presidential Election

    @xaade said:

    You miss out that CS is not just a programming degree.

    That still doesn't justify those mandatory calculus classes. I took a lot of courses in university that I consider valuable for my education, but not for my job, and I don't regret taking those classes. But most of them should not be mandatory.

    @xaade said:

    R

    Trigger warning, please? 👀



  • @blakeyrat said:

    I'm not saying it's a WRONG assumption, I'm saying it's an assumption and you should probably acknowledge that before you speak "authoritatively" about it.

    I assume you're a human being. It's a much more risky assumption than that they meant .NET.



  • @Gaska said:

    And if I "truly understand" it, it helps me write my spreadsheet application... how exactly?

    ...

    I don't know shit about toilets, yet I can still take dump just fine TYVM.

    @Gaska, I love you 💌


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.