Your Computer Science Education

  • Comments posted to this topic are about the item Your Computer Science Education

  • I know a lot of folks think that a CS education isn't necessary because they didn't have one and they don't miss it, and because they see clueless CS majors who never stopped to think about applying all that nice knowledge. Both aren't great as examples.

    What did I get from CS and still use?

    • Imperative programming.

      I programmed C++ for 3,5 years. I used this ever minute of the day in order to build software that failed *after* Windows failed. I recently ran my old software on Windows 11: it still worked flawlessly. Why? Because I work with preconditions, postconditions and invariants automatically. I don't even think about it anymore. And those 3 things enable you to validate software.

    • Functional programming.

      Ever used LINQ ? SQL? Those are examples of declarative languages. Most of those (Haskell, Miranda, Linq) are based on the Lambda calculus that I had to learn. LINQ is actually designed or heavily influenced by Erik Meijer, and he graduated from my university a few years before me, specializing in functional languages. It really helps to understand that almost all functional languages are based on the Lambda calculus and the rest is just syntax. Know one, know all.

    • Data structures

      I know exactly how B-tree and hash indexes work because I had to learn all those underlying data structures. And use them. There are more structures than that but we covered almost all of them in the relevant courses. That really helps to explain WHY you need a given index for a given purpose.

    • Computer architecture

      The influence of the architecture of a computersystem on its behaviour is grossly underestimated by most DBA's. Why was the Netezza  the same as Hadoop, but much cheaper? Why do certain jobs take less time and others more, when you run in the Cloud? What is the impact of glassfiber on throughput, as opposed to a faster SSD? I can visualize that immediately because I understand the interaction of all components. Granted, most of this is experience, but getting a good foundation really helps.

    • Fundamental algorithms

      Why is basically all we do subject to the order N log N rule? When and how can we improve our runtimes for operations? The knowledge of fundamental algorithms help you prevent costly mistakes and really long runtimes.

    And last but not least:

    • Set theory and predicate logic

      All of data modelling is based on the combination of these two. Set theory encompasses the universe of discourse, of all possible values for all properties. Predicate logic constrains those values. It encompasses all types of constraints. Once you understand those two, you also understand why logical models are called logical models, and what should and shouldn't be part of them.

    What you usually don't get in CS, but should:

    • Semantics and the semantic web. If you want to model the world, semantic web technology is often a better match vs the real world (with its open world assumption) than logic, but logic is better suited to administration. Knowing when to use what methodology makes you an expert information modeler.
  • Mine wasn't a degree, it was a UK HND in Business Information Technology and comprised of 3 modules

    • Business Decisions
    • Business Policy
    • Business Systems

    This was in 1985 so PCs weren't common place, MSDOS was just overtaking COM, Microsoft Office had yet to be invented.

    The course was more about how technology could be used to help business so we learned apps that were analogous to the Office apps.

    • Microsoft Word (with visits into Wordstar and WordPerfect)
    • Microsoft Multiplan and Microsoft Chart, the combination of which is analogous to Excel.  We also did quite a bit with SuperCalc and Lotus-123
    • dBase II and Clipper
    • Harvard Graphics

    We had an introduction to the PICK operating system.  The sign above the computer lab read "You have to be thick to love the PICK"!

    I studied at Newcastle-upon-Tyne polytechnic.  For non-UK residents the polytechnics were supposed to be higher education with a strong leaning to the practical and technical rather than the academic.  Personally I feel that the rebranding of the polytechnics as universities was a big mistake.  There was a lot of snobbery about qualifications from polytechnics vs universities.  A degree from a polytechnic was seen (incorrectly) as being less worthy than a degree from a university.

    The course was 3 years with 2 sandwich placements where we had to go out and apply what we learned in the real world.  I think this industry experience cemented my ambitions.  All our lecturers worked in industry part time and most had published books (which were required reading for the course).

    The final year exam was a simulated working week.  We had an in-tray in which tasks were placed throughout the week.  You could be working on a task when one arrived in your in-tray so part of the exam was to prioritise the work.  Part of the assessment was to see which tasks you parked, which you prioritised and also how much effort you assigned to those tasks based on their relative importance.  I I felt this was an excellent way of testing what we had learned from a technical stand point and also how we applied it.

    Given the state and availability of technology at the time I can't think how the course could be improved.

  • I graduated in 1986 with a Masters degree in Computer and Information Science. I came out with a basic understanding of operating systems theory, software design based on Waterfall which was the common practice, a tremendous respect for Donald Knuth and his books, and some limited concepts of artificial intelligence and LISP. I also had the opportunity to take a course in APL (boy is that a twisted yet powerful set manipulation language), and some computer graphics. But almost no practical experience in actual programming with a language currently in use in the real world. The theories and basics covered by that degree are what I credit as the basis for helping me transition over the years with jobs and the programming languages. So, yes, the degree was valuable for the theory. I think its helped me write better code over the years, But, if I had to do it all over again, I'd probably just get a certification of some kind from the local Community College.

  • I have degrees in Political Science and History, which were useful for the jobs I had following getting those degrees.  I had done some BASIC programming in High School in the computer club.  We used a phone to hook into a central computer some distance away.  My first professional contact with computers was as a Field Artillery Officer using the Battery Computer System (BCS) and Backup Computer System (BUCS) that calculated firing solutions for the guns.  We had to learn word processing and spreadsheet software at the Advanced Course.  My first job out of the Army was teaching computer applications such as WordPerfect.  That led to Microsoft Access and learning about databases.  The rest is history.

  • My degree is in Mathematics. One of my Math professors said that all Mathematicians should learn APL, so I took a course in APL. Its a bazaar programming language, but I enjoyed it for the power it gave me in doing math. I haven't touched APL since college, so I don't think it really did me as much good as that math prof suggested it would.

    Because my degree has nothing to do with CS, I don't think I can comment on the rest of your questions. I did, for a short time, try to earn a masters degree in CS. I took an assembly language course and a course on a survey of programming languages and styles. That was very interesting. Unfortunately, life threw a very serious curveball my way, which derailed my pursuit of a masters in CS.

    Kindest Regards, Rod Connect with me on LinkedIn.

  • The vast majority of folks in IT are not scientists or even engineers, and I'm not sure there is really any broad market demand for it. Most organizations are moving to (or lost since moved to) cloud hosted ISV applications, which is where the real science and engineering happens. Really, most IT jobs boil down to an organization looking for someone to keep their servers running or create custom BI reports, and you don't need to know the theory of operating system design for that.

    "Do not seek to follow in the footsteps of the wise. Instead, seek what they sought." - Matsuo Basho

  • I also got my degree in Math, with a minor in Economics.  My first job out of college was working for a bank on the mortgage rate sheet team.  In that job, I taught myself to code in Excel VBA, and that lead into programming and databases.  I do believe a degree in math is very helpful for SQL.  Discrete math and set theory go hand-in-hand with SQL.

    Be still, and know that I am God - Psalm 46:10

  • I'm also one of the old-timers who got a Computer Science degree in the 1980s. I started programming on green screens in FORTRAN-77 on PDP-11 minicomputers, learned IBM 360 Assembler programming on punch cards, and picked up BASIC, APL, LISP, Pascal, COBOL, and C. I also worked with magnetic tape (reel-to-reel) and even paper tape! I got to work on early Unix, VAX/VMS, and CP/M systems. It wasn't until my senior year that I was introduced to the original Macintosh, which I used only for the early word processor.

    Of course, none of those technologies and languages are in use today (at least in the same way). I learned much about computer architecture, database fundamentals, and how language compilers worked. Still, my solid background in fundamentals allowed me to learn new technologies and languages and rapidly become proficient in them -- even in the heyday of waterfall!

    Interestingly, my Master's in Computer and Information Systems did not contribute much to my learning. It wasn't until I got involved in healthcare that I learned even more. My second Master's in Health Informatics was very useful, as was my doctorate in Healthcare Administration.

    Because I learned how to program in the days when memory, storage, and CPU were limited, I learned how to be efficient and effective in my development. That has carried me forward to today. Those I worked with who do not have this background miss some of these fundamentals, which are also reflected in their approach.

    In my experience, too many developers today rely heavily on established frameworks, very high-level languages, and virtually unlimited computer resources. They are taught to code quickly and move on to the next thing, to solve the problem of the moment in whatever fashion can be done the fastest, and not worry about tomorrow. Agile development has been highjacked to mean only focusing on the current sprint; planning is unnecessary, and getting the code done now is imperative. And, for some reason, no one ever wants to go back and improve code unless it's an absolute bug, which will usually be treated with a workaround. Conciseness, consistency, and clarity in code are not considerations. In my humble opinion, not enough developers today take ownership and pride in their work.

    I truly hope that the experiences of others are not the same as mine.

  • I graduated in 1965 with a degree in Sociology and my alma mater had some sort of tiny computer buried away in a basement but I never even saw it.  Then while working on an MA, a job opportunity caused me to move.  After a couple positions in bookkeeping/credit management (all self-taught), I had a friend show me his company's IBM 360 system and give me a little aptitude test.  Two days later, I had a job offer to come and learn for a salary increase of 60%.  I first learned COBOL by taking home the old IBM manuals, then 360 Assembler,  studying at night but of course back then there was no hands-on or online learning.

    Over 42 years I kept current and improved skills by taking night courses at community colleges in two states.  In twelve years as a shop manager, I hired developers with some experience and a couple with two-year certificates.

    My conclusion after 42 years for both myself and those I worked with - Experience is the best teacher.  Many times those with the most degrees knew all the answers, but just didn't understand the questions.  The ability to understand what has happened and anticipate what will happen in critical.

    Rick
    Disaster Recovery = Backup ( Backup ( Your Backup ) )

  • I graduated in 1981 with a degree in CS; it was relatively new degree within the Math department at the university.  (I believe a similar experience to Aaron Cutshall.)  Programming was mostly card-based.  The main language being taught was PL/1, the university said it was the language of the future, haven't used it since.  Was also taught Basic (not Visual Basic) and some Assembler.  A Computer Engineering course and some statistics classes were required (as was a year and a half of Calculus which I have not used since).  One of the most useful CS courses I had was database theory.

    I felt I learned much more in my summer co-op experience than at university, maybe because of the major being relatively new. The company I co-oped with for 2 summers (the same one I recently retired from) felt it would be good to put the co-ops thru the entire CS experience, giving them appreciation for all aspects of things 'computer'.  First, I started in the input/output room sorting computer cards, wiring card interpreter boards, stuffing factory 'shop routing packs', mailing reports. etc.  Second, I worked as a computer operator loading and unloading paper in printers, replacing computer tapes and dis-mounted disk drives as the system requested (it was an IBM DOS 360).  Very practical experience I could apply in my CS courses.

    The next summer I started out as an Operations analysts, writing JCL jobs, monitoring JCL job and performing simple corrections to simple failures, or contacting people for more complicated failures.  Most of this effort involved job running remotely on an IBM 3033, which later was upgraded to the 3081. IBM's TSO/SPF was the main interface, a great deal more user friendly than the computer cards at the university.  My finale co-op assignment was actually doing programming.  Cobol and CICS was the majority of the code base at the company using IBM's IMS database.  Also was exposed to Fortran, RPG, SAS, Pascal, Visual Basic, and C++.

  • My degree is in Sacred Music, and I understand I was lucky to get hired by EDS into their SED program back when they were hiring people they felt were good fits and smart enough to train into a software engineer role.  While in EDS's tech school (1992), I learned COBOL, JCL, assembler, and CICS, but starting on my first assignment out of tech school and pretty much every role since then, I've worked with some flavor of SQL - DB2, DB2/2, dbase, Access, Oracle, SQL Server, and just now cutting my teeth on PostreSQL (seems like I've forgotten one or two as well).  Eventually I decided I really liked SQL and started nudging my career in that direction, and am now a Sr. Data Engineer.

    Just a personal observation as someone who has been involved in an admittedly modest number of hiring decisions (and then working with those hires) over the years at companies that didn't have substantial internal training programs... The only time I've found some sort of CS degree very important was in considering folks very early in their career.  Once someone has been in the CS workforce a few years, I was much more interested in whether they could meet a baseline technically and whether I felt they could adapt to a new situation (since no two tech jobs are exactly alike), as well as intangibles such as how well they might fit into the company culture.

    I'm absolutely not dissing CS degrees in any way... but mostly pointing out that a proven record of success in a field weighs much more heavily, at least in my experience... while also understanding that to prove success somewhere, it's a prerequisite to get that first job, and a CS degree could be very important to doing that.

  • I'm absolutely not dissing CS degrees in any way... but mostly pointing out that a proven record of success in a field weighs much more heavily, at least in my experience... while also understanding that to prove success somewhere, it's a prerequisite to get that first job, and a CS degree could be very important to doing that.

    I must say that most of the really good IT people with whom I've worked DON'T have CS degrees.  Those with degrees have a lot of technical knowledge, but overall at least the ones with whom I've worked lack creativity.  The degree almost seems like a handicap.  All my evidence is anecdotal, but it has been reinforced on multiple occasions.

     

     

  • RonKyle wrote:

    I'm absolutely not dissing CS degrees in any way... but mostly pointing out that a proven record of success in a field weighs much more heavily, at least in my experience... while also understanding that to prove success somewhere, it's a prerequisite to get that first job, and a CS degree could be very important to doing that.

    I must say that most of the really good IT people with whom I've worked DON'T have CS degrees.  Those with degrees have a lot of technical knowledge, but overall at least the ones with whom I've worked lack creativity.  The degree almost seems like a handicap.  All my evidence is anecdotal, but it has been reinforced on multiple occasions.

    I find that the people who were smart, were interested in the world around them, and used their fantasy as shown by designing games, playing Dungeons and Dragons for the roleplaying, tried to improve the world because they thought it needed changing... they all had a serious advantage when combining that with their CS degree. I spent time with those people and all of them got serious jobs and careers, except the really lazy ones who did just fine but not exceptionally well.

    However, I also met quite a few CS students who couldn't see further than their keyboard, were not interested in learing how the world worked, and consequently ended up on helpdesks, and uninteresting jobs. Those were the people who were good at learning things, but not good at thinking further than the stuff right in front of them. They also didn't understand how science actually works (it's a way of thinking and processing the world in a very efficient manner) and that must have hampered them greatly.

    What I'm trying to say is... you're right, creativity is *very* important, and combined with an interest in learning and a sharp mind you can get very far without a formal CS education. Or perhaps even without a science education.

    But... once they give you the swiss pocketknife that is the scientific method, sharpen it by drilling the correct way of approaching problems into you, especially CS problems, and give you the background to  generalize almost any CS problem you will ever see to a superset of generic problems with known solutions, the whole CS field becomes a sort of kindergarten where you see a lot of folks stumbling around blindly, flailing with their arms for a solution, while to the educated it's clear at first glance most times.

    I still learn something new regularly to keep it sharp. I'm delving into ontological commitments versus semantics in SKOS and OWL at work, and this weekend I was programming a HTML page with javascript to keep up my programming skills, and ran it through an Apache2 installation on Docker because I wanted to try Docker.

    That attitude (keep learning) was also something my innate curiosity gave me, but my study made it far easier to find the right resources and weigh their value.

     

  • For the 1st time in decades I have been asked about my education for a pitch to a client.

    Technically, politically and socially the world is radically different to what it was in the late 70s, early 80s. It's difficult to see how such ancient education could possibly be relevant to employers today

Viewing 15 posts - 1 through 15 (of 21 total)

You must be logged in to reply to this topic. Login to reply