Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think GP hits the nail on the head there with the homework analogy, and you with yours. Just talking to my friends in other careers about the work that I do makes me check time and time again just how many assumptions of knowledge I make when talking about anything vaguely technical (which is possibly a criticism of how I explain things, but also/even if so says lots about this issue).

What surprises me is the lack of consolidated resources addressing these basic pain points. I don't think it would be hard to come up with a list of examples just by looking at a normal work day and taking a step back; really evaluating where you're relying on basic knowledge to do even the most mundane of tasks. Once you've been doing this for a few years those tasks are just that - mundane - but for beginners it's having difficulty with those basic parts that is a real turn off. "How will I ever be any good at this if I can't even download code off this thing called Github". If someone could point me towards some kind of existing resource covering a bunch of different areas in this way I'd be really interested in having a read.

On a related note, I'm reminded of one of Dan Luu's related essays on debugging [1], which I recommend reading if you haven't already.

[1] https://danluu.com/teach-debugging/



My Cousin smart kid had to come over at midnight because he had his first java assignment outside the ide. Couldn't compile because class path was not defined right on windows. Things like that scare people or pop their confidence.


That just sounds like the professor didn't teach them about Java classpath before telling them to use a CLI; or this kid didn't read the course materials.


It's not unusual, in education, to begin with something interesting* to provide motivation and a big-picture view before getting into details.

For example, if I wanted to teach a kid to use an Arduino, I'd start them off getting an LED to blink by telling them which wires to plug in where, and what code to type in. If they were good at that, maybe I'd have them make it fade in and out like a macbook light.

That way, when it comes time to learn about voltage and current and P-N junctions and bandgaps and PWM and cross-compiling and memory maps and bootloaders, they'll have real-world examples to relate it to.

The difficult part, of course, is even if I thoroughly test the instructions with a clean VM and hardware, the instructions can still fail - like if they've installed a different version previously and there's some sort of conflict.

*Or at least, interesting by the standards of the course


Sure, but if you have been playing around with environment variables in your OS since you where 8 years old the problem becomes a lot easier to troubleshoot, compared to someone who has never heard of environment variables.


Even after decades of experience, this stuff can still be extremely frustrating. I remember my first experience trying out Go, fighting with the GOPATH and GOROOT variables until I could figure out how to get things installed properly.


I recently had this experience as well, it was a good reminder about the fundamental obstacles. Although after years, we're much better equipped to interpret error messages and search for answers than a novice. Also, google now vs pre-google. Answers are so easy to find now, it boggles the mind.


I'm a bit interested with your comment. Do we have 8 year olds playing around with environment variables in the OS? I'm curious because I never thought that could be possible


It was not uncommon to have to monkey with crap like that back in the DOS days, to do the most basic things. I vaguely remember having to fool around with autoexec.bat and play with virtual and extended memory settings to try and get Raptor: Call of the Shadows, Wolfenstein 3D or Warcraft: Orcs and Humans to load up and use the right colors on the family 586, when I was much too young to be playing such games - or really tweaking environment variables.


Yea, having to hack your autoexec.bat and config.sys files to get your games to work was definitely a formative experience :)


I remember having to muck about with autoexec.bat files when I was SIX (this was a quarter century ago) because our 386 desktop had enough memory to run either Windows 3.1 or the CD-ROM drive, but not both simultaneously. Granted, I was just copying instructions that my dad had written into a workbook, not writing the file myself.


That's likely a source of frustration. In class, professors and other students might assume you already knowing something as in indicator that you're passionate/interested and not knowing it means you're not. (A->B doesn't necessarily mean ~A->~B, right?).


Maybe, but the procedure is the same as for any other error you don't understand, copy paste the error message to a search engine and use the results to figure out what it means and how to fix it.


Which teaches you how to find other people's solutions to your problem- a valuable skill - but you miss out on building foundational troubleshooting skills.


But that kind of information should just be in the instructions for the assignment. It's a problem with the instructor, is what I'm getting at.


Doesn't the Java processor tell you in the error message that it "can't find x in classpath" or whatever?

Perhaps the lesson was "read the error message; if it doesn't help then take that as a call to produce useful errors in your own programs"?


Learning to read errors is itself a skill. The number of professional devs who ask questions of the form "I got this message what do I do" and the message itself tells them what to do is astonishing.


to be fair, I've been coding for 8 years and have never coded in a Windows operating system outside of an IDE, and in general I don't use either, and have not since Computer Science 1.

For a job, I had to get python working on Windows, and it took me a few days to get it in stalled correctly on Windows. Even after years of coding experience.

The issue with Windows is it is designed to explicitly hide the backend functionality, and modular accessing and modifying of it to the front end user, so when you do need to do something of the sort, it's more difficult than linux, and even after using linux operating systems, macbooks I find difficult to work with because comustomizable things are hidden to the average mac user.

That being said, a linux operating system is probably daunting for a first timer.

HOW I LEARNED COMPUTER SCIENCE

I only minored in Computer Science, and like others, did not even know what it was until I went to a tech college for Electrical Engineering. I grew up in the deep south low on the socioeconomic scale, noone in my family even went to college ever so I just had had no exposure to computers or even the idea of computer science before.

It seemed cool but daunting.

1. I got a part time job in tech support to help myself get acquainted with the parts of computers and technology that you need to learn so that when you do Computer Science you can focus on Computer Science.

That side job was 15hours a week over two years and it helped me learn alot about troubleshooting, viruses, computers, I reimaged hundreds of computers and learned how to make my own isos, take apart and put together computers.

It made my computer science courses in relation seem ideal and the technical bottlenecks of working in different environments whether operating systems, relatively trivial but yeh, I had to double up on my time commitments and turn my college job into tech work to catch up.

2. once I learned what a linux operating system was, I started using only minimal versions of linux, so I would be forced to learn more about how computers work to do everyday needed tasks, along with all over layered projects and school work on it. This helps ALOT.

You want to print something, you need to install or update the drivers, you want a functionality that you didn't know could never not exist on a computer, now you learn how to figure out what to download, what rpms are learn alot about options you have from opensource packages many people have made.

Now you are aware of hundreds of gaps/needs in functionality that have not been written so you could try something and have a realistic project to work on.

You have access to other peoples code...etc...

All of this from googling about printing drivers and why you have access denied....

the learning curve is steep but its hard to learn about this world any other way.

WHY I DID NOT MAJOR IN COMPUTER SCIENCE

In regards to Computer Science, there were a few reasons I did not end up majoring in it despite really liking it, and now taking coursera courses from Stanford and Princeton to supplement my desire 5 years post graduating to go back and learn more and shift to full time software development.

As a disclaimer, these are all really a result of my mental approach/reaction to a growing desire to learn more Computer Science.

1. I really didn't have the self esteem that I could do it in four years.

I knew I could excel at Electrical Engineering, but Computer Science seemed like a whole new world I could not learn in four years.

2. I went to a pretty good engineering school, and the kids in Computer Science had basically been coding since they were 8, so for me I felt like the competition was high and I could not stand a chance.

3. In retrospect that was not the case, and in fact the people I did know in Computer Science were very welcoming and encouraging to me coming into it, but I really didn't believe I could do it.

I regret that approach now, and I could blame it on all things academia in Computer Science, but it was really my reaction to the sentiment echoed here already that it takes years to really feel comfortable with Computers, programming and all of it in context so you aren't constantly wondering what youre not understanding or spending hours trying to set up varied work environments because you've never used a terminal before.

It is a continual effort and Computer Science, more than any other major or practice, is a new lifestyle and way of thinking, and a lifelong commitment to learning.

For me, I have continued on this path and continued to code for years after college and work on independent and group projects, and taken on coding work in my jobs in relation to electrical engineering. Just now at 26, being first exposed to Computer Science at 18, do I feel confident about my ability to learn and do well as a software engineer that is not a code monkey, working on computationally challenging problems where scaling, algorithms and data structures are a core part of design and implementation to make something successful.

You just have to keep trying, and in general, in regards to computer science or elsewhere, this weeds out alot of people.

SOME INTERESTING THINGS

As a final note, I would say the most daunting part of Computer Science in college was the perception I had about the experience and practice of Computer Science majors versus mine. I felt really ignorant in comparison and had no realistic way to convince myself I could compete and do well amongst kids with 10+ years experience.

Perhaps the value of this post is to say. I overcame alot of obstacles socioeconomic and otherwise to get into college in the first place.

I made a 4.0 in a private high end highschool and had and have a good work ethic and intelligence.

I even went to an engineering school and majored in Engineering.

Despite all of these layers of statistical thinning, I still didn't feel I could cut it as a CompSci.

If it is challenging for someone who is otherwise very smart, exceeding well by all academic metrics, has a good work ethic and is already in a school offering a good Computer Science program, wants to learn Computer Science, takes entry level Computer Science courses and makes As in them, and still doesnt feel confident about Computer Science, then there is definitely something about Computer Science, that sets the barrier high for learning.

It's definitely a DIFFERENT way of thinking, and I think the barrier to that new way of thinking is not a barrier for learning in most other places perhaps maybe save linguistics, which is also extremely difficult to become proficient in if you did not grow up in a multilinguistic environment or are not constantly saturated in living in a multilinguistic community.

You need to saturate yourself in a new way of thinking, and for me it is incredibly rewarding and translates into every other part of my life and allows me to think more objectively and logicially, creatively and efficiently than I have knew I could, but I think it is the way of thinking that is the learning barrier, along with the multilayered skills needed to navigate complex computing environments, that keeps people from Computer Science.


Lots of good insight here, you ought to cut n paste this into medium to get it out there. I particularly find your perspective of academic high achievers, who have already over come many obstacles, to still find CS as an impenetrable discipline.


This is really valuable insight. Thank you for sharing this!

If you don't mind me asking, did you apply this approach to specific programming languages? I'm curious which ones you tried to learned and ended up sticking with, and why.


What I stick with is based on what I'm developing and working on. The important part is to not be afraid to learn and try new things. I have not stuck with anything in particular but I stay strong in C/C++ because most of my development has related to efficient memory solutions.

On the other hand, Java is really nice for algorithm testing, and writing for classwork.

Javascript is obviously inescapable in some format if you are doing web development so I jumped right in and have learned it with Angular, Express, the MEAN stack in general etc.

It's better to have actual projects to work on. From there its easier to center around a framework, but I still prefer C/C++ but I am learning to appreciate Java the more I develop GUI applications and test more complex algorithms.

Recently I'm trying to test out an idea for an app, so the first thing I knew is I wanted it to be cross platform, so I've had to learn alot more javascript/ionic framework, etc. cordova and how phonegap is a version of that, and learn android and ios app dev to understand how phonegap links the two, and of course theres a movement to use react to dev natively, and Kotlin is coming in strong in the Android space with cross platform app dev, so there is alot you have to learn once you have an idea, and need to learn what helps you implement that idea/project, and you learn more that way instead of saying "I'm going to create something pretty with javascript". You will learn 20x more by making an entire project from design to implementation, and become familiar with how to navigate when and when not to use languages, frameworks technologies, you have to try stuff and fail alot and keep going and continue to make time to put thousands of hours of work into it.

You have to like it to do that, I really enjoy it.


I still remember a lab where one of my friends was up all night trying to find an error in his Java (1.0) code that ultimately came down to having a single character lowercase instead of uppercase.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: