The Apprentice

  • roger.plowman (9/9/2011)


    This thread is just another version of "should we promote certificates". 🙂

    Having spent 30+ years in the industry as a jack-of-all-trades (master of none I admit) I've seen great self-taught/horrible self-taught and great degree/horrible degree developers.

    I've actually come to the conclusion that CS teaches the *wrong* stuff. Everyone who thinks CS teaches you underlying theory is only half right. CS teaches theory--but not *useful* theory.

    I mean sure, learn a couple of sorting algorthythms in CS 101 but do it to teach the *important* stuff. Not how to sort--instead teach *why* bubble sort is such a horrible choice. (Because it works way too hard, that's why!)

    I guess the true importance of theory can be boiled down to an appreciation for elegance. That's really what development is all about. Something that's simple, fast, *and* easy to maintain, that's the holy grail.

    So the theory you should be teaching (beyond the basics of looping, branching, syntax etc) is how to recognize which technique will be better in a given situation, how to break down a problem into pieces, *why* we document, how to write user documentation that is actually helpful, principles behind UI design (why you don't use 15 colors on one screen 🙂 )...and all of that with emphasis on why one way is better, not just how to do x, y, and z.

    You concentrate on elegance in CS and mix it with apprenticeships in the real world and you'll vastly improve the developer average skill--and halve the learning time.

    Because when someone knows the why of a thing they tend to make fewer stupid mistakes...

    I actually recently supplied that as a suggestion to my college, that we should have a course on creating, populating and evaluating some sort of test harness, so that students have to concentrate on how to get testing done effectively for a semester.

    ---------------------------------------------------------
    How best to post your question[/url]
    How to post performance problems[/url]
    Tally Table:What it is and how it replaces a loop[/url]

    "stewsterl 80804 (10/16/2009)I guess when you stop and try to understand the solution provided you not only learn, but save yourself some headaches when you need to make any slight changes."

  • I do think there should be a formal mentoring process for new IT hires, especially developers. A new developer would therefore be considered an Apprentice until they really understand the application or database well enough to start modifying it. Should be a mentor and apprentice, but it often times doesn't work out that way.

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

  • Surely though the testing team should catch any faults, which in turn will highlight development areas for any new staff without slowing the pace of existing staff?

  • The best developers I know were, to be blunt, just born with it. Yes, they had to learn the syntax, but they seem to know the answers without ever seeing the answer before. They just know how to troubleshoout or can see 10 steps ahead. While I think degree(s) and certifications are definately needed for the mass of people, are justifiable pieces of paper to pay peope more, and something managers almost have to take into account, there's probably only a 50/50 chance of what they went through was relevant or can in their job. 2 of the 3 best developers I know struggled through college, the third, well he got 4.0's without any effort at all, while working 2-3 jobs, and in sports. Unfortunately I had to go the educational route myself as I was not born with it, and after 10 years of school, certification study, and reading books, hopefully I'm 40% as good as them after putting in 200-400% the time in education. So, ya, I guess education can help those who aren't born with it, won't make them the best though.

  • Ben Moorhouse (9/9/2011)


    Surely though the testing team should catch any faults, which in turn will highlight development areas for any new staff without slowing the pace of existing staff?

    Ha! Testing Team! You're funny...:-P:hehe:

    ---------------------------------------------------------
    How best to post your question[/url]
    How to post performance problems[/url]
    Tally Table:What it is and how it replaces a loop[/url]

    "stewsterl 80804 (10/16/2009)I guess when you stop and try to understand the solution provided you not only learn, but save yourself some headaches when you need to make any slight changes."

  • jcrawf02 (9/9/2011)


    Ben Moorhouse (9/9/2011)


    Surely though the testing team should catch any faults, which in turn will highlight development areas for any new staff without slowing the pace of existing staff?

    Ha! Testing Team! You're funny...:-P:hehe:

    😀 Weeeelllll.... we seemed to be talking about living in a perfect world!

  • roger.plowman (9/9/2011)


    This thread is just another version of "should we promote certificates". 🙂

    Having spent 30+ years in the industry as a jack-of-all-trades (master of none I admit) I've seen great self-taught/horrible self-taught and great degree/horrible degree developers.

    I've actually come to the conclusion that CS teaches the *wrong* stuff. Everyone who thinks CS teaches you underlying theory is only half right. CS teaches theory--but not *useful* theory.

    I mean sure, learn a couple of sorting algorthythms in CS 101 but do it to teach the *important* stuff. Not how to sort--instead teach *why* bubble sort is such a horrible choice. (Because it works way too hard, that's why!)

    I guess the true importance of theory can be boiled down to an appreciation for elegance. That's really what development is all about. Something that's simple, fast, *and* easy to maintain, that's the holy grail.

    So the theory you should be teaching (beyond the basics of looping, branching, syntax etc) is how to recognize which technique will be better in a given situation, how to break down a problem into pieces, *why* we document, how to write user documentation that is actually helpful, principles behind UI design (why you don't use 15 colors on one screen 🙂 )...and all of that with emphasis on why one way is better, not just how to do x, y, and z.

    You concentrate on elegance in CS and mix it with apprenticeships in the real world and you'll vastly improve the developer average skill--and halve the learning time.

    Because when someone knows the why of a thing they tend to make fewer stupid mistakes...

    I agree 100%. Of course you can say this because of your experience.

    One thing I'd add is a willingness/desire to continue to learn. In my relatively short-time in the industry I've seen plenty of people with 20+ years experience who are still working the same way they did 20+ years ago, when there are better/more elegant ways to accomplish the job.

  • The suggestion is highly contrary to other suggestions you have made. Think about it - you frequently bring up how business is expecting more and more from us so we need more education at our own expense, how can ignoring one's education in college help us? College isn't (mainly) about learning facts. It is about learning how to learn. Especially given the proclivity of the US college system, where the agenda is to force feed ultra liberal theory (long proved a ridiculous failure) instead of actually teaching the truth, I find that the best students are ones who learn to think for themselves early.

    Therefore the two things I see college providing are the specific knowledge of the career track you choose, such as finance or programming, and the ability to learn on your own. I would bet the overwhelming majority of people in the industry have degress in a number of areas outside of computer technology. The successful ones are those who were able to discard the failures of the education system while expanding their own ability to read, learn, think and do. The failures, well most of those are in the media, politics, and of course education.

    My own education is relatively well rounded, however one area I never took a course in is accounting. Yet I have been involved in multiple jobs where I needed to understand assets and liabilities, and I have been involved in multiple projects where I needed an even deeper understanding. It is my breadth of knowledge and experience that has allowed me to learn new things like this despite a lack of formal training. You can get that in different ways, but college is still the best way, and it is becoming the only way as companies are relucatant to hire anyone who doesn't meet insane standards, preferring instead to outsource at a higher cost than the employee they could have had.

    Dave

  • syen (9/9/2011)


    Some go to higher education to get a piece of paper, and others to get a fresh start. Whatever the reason, ideal job candidates come out of higher education with the ability to learn how to learn (quickly). Those making it through a MS or PHD program are more likely grasp highly complex problems quickly and to think about unintended consequences. They also tend to have a higher pain tolerance for steep learning curves on new tech.

    The degree does not have to be in computer science, but a few classes in computer science are always a plus. My BS and MS training as a Mechanical Engineering does not help me directly in working with databases, and software development, but the problem solving skills honed through additional education have definitely helped out. We have a DBA who has a Library Science (Librarian) degree. Her ability to organize and relate large amounts of information is a great asset. My best developer is an English major. Needless to say, his documentation and object naming is very good, and he is good at producing user interfaces that make sense to the average user.

    Regardless of whether a person has a degree or not, the people I hire have to enjoy learning and a personality that will fit with the team. However, if you don't have the "proper" degree, you won't stand a chance making it past HR's procedures:

    INSERT INTO tblNeverToBeSeenAgainArchives (JobCandidate_ID) SELECT JobCandidate_ID FROM tblApplicants WHERE HasDegree=FALSE;

    DELETE FROM tblApplicants WHERE HasDegree=FALSE;

    And there, things break down. I have 20 years in the business. I'm a published author. I teach SQL Server. I don't have a degree. You're telling me I can't get past HR? Your business is in trouble.

    "The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood"
    - Theodore Roosevelt

    Author of:
    SQL Server Execution Plans
    SQL Server Query Performance Tuning

  • Jack, that was the biggest pain in the posterior I ever came across when I first joined my last team... developers who "knew" how things should be done and would not alter from that, completely disregarding new technologies that were already available to us and insisting on steps that were essentially no longer relevant.

    bah! I'll cut my rant short!

  • My degree is in Physics, but when I graduated all the jobs were in programming. Most of the CS majors I knew if they stayed in computers they did helpdesk or techsupport. Very few seemed to go into programmer. Actually, I think a four year degree although expensive these days, is useful in one's personal development.

    Four years is a good amount of time to get your partying out and get serious about getting your life together. Do you want to hire someone who parties all night and weekends?

    Getting the four year or for some five year degree shows a level of determination. It takes work and planning to actually get your degree.

    With some of the science or math majors, you spend four to five years solving problems. Difficult problems. This was the argument I used to get my first job. I told the interviewer, I don't know the programming language you want me to know, but I just spent the last four years solving difficult math and physics problems. It won't be much different solving problems for you.

    I would argue in fact, sometimes you get better programmers from people that didn't get a CS degree.

    Ben

  • Grant Fritchey (9/9/2011)


    And there, things break down. I have 20 years in the business. I'm a published author. I teach SQL Server. I don't have a degree. You're telling me I can't get past HR? Your business is in trouble.

    This would be a red flag for me. If a company has policy like this, what other policies do they have. Its probably a place I would turn down anyway.

    I'm in a similar boat not having a degree. However I've never been without work for more than two weeks. I think my enthusiasm and experience are far more valuable than a degree.

  • Question Guy (9/9/2011)


    The best developers I know were, to be blunt, just born with it. Yes, they had to learn the syntax, but they seem to know the answers without ever seeing the answer before. They just know how to troubleshoout or can see 10 steps ahead.

    I definitely fall into this camp of thinking. I know when I first got into development, it felt very intuitive to me. I have a mix of classroom instruction and self teaching. I've always had a couple of problems with both ways of learning.

    In a classroom setting, be it grade school, high school or college, I was almost always able to pick up concepts quicker than my peers. Therefore I spent a good amount of time either going ahead without the teacher, daydreaming, or working on something completely unrelated to the class. (Doesn't seem to apply to finance courses as much though)

    When learning things on my own, I would take myself to a certain point and then get wrapped into something else or otherwise abandon the effort for some reason. For example, between high school and college, I started teaching myself C++. I had a book I was reading and doing all the examples and problems in. Then I got to the chapter on pointers, read in the book that you could seriously mess up your computer and I stopped.

    The other problem I've run into is that the university program I followed (2 years at community college getting a liberal arts degree focusing on Math and Science, 2 years at a university finishing a bachelor's in CS) seemed to be either lacking, or didn't clearly define pre-reqs for classes. I took a class in software development before really learning anything about databases. I was required to take a class for technical writing, but that really didn't help me write requirements documents or user manuals. The closest I came to learning testing was when I was taking Java classes, because the professor made a point of giving us basic unit testing skills.

    Now that I'm working in the industry, I feel like it wouldn't have more helpful if the "seminar project" I was required to take for my bachelor's would have been two semesters with some time spent gathering user requirements from the instructor and then implementing a solution instead of just picking your project and developing it.

    I think the real solution is some combination of both self-learning and "guided" learning, whether that be through a university or apprenticeship. I also feel like there needs to be a good mix of theory and practice.



    The opinions expressed herein are strictly personal and do not necessarily reflect the views or policies of my employer.

  • I got my start by completing a vocational school for mainframe programming in the early 80s, but I had already attended college as part of an earlier career path. I've continued to learn new technologies in order to remain employable. That worked for me at the time, but I think it would have been useful to have followed a CS track. I think there are concepts that I missed out on in vocational school, particularly with relational theory, etc. In the business world, I also think it's useful to have a more well-rounded education.

  • I guess I should have chose my wording better. What I meant to say is that if you got anything out of college is an improved ability to learn how to learn faster. If you didn't get that out of college, you wasted your money.

    It's too bad there isn't a metric of a person's learning velocity.

Viewing 15 posts - 31 through 45 (of 94 total)

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