Fork me on GitHub

A bit of a rant, I have a friend that studies programming in an Indonesian university. She has Java classes, I've seen a few of the papers her teacher gave her. It's horribly boring and outdated, it seems to me they're trying to make her memorize the java documentation. She doesn't own a computer at home, she does java programming on her phone. In class they do use computers, but not very often, it's mostly paper stuff. I don't know how anyone could come to enjoy programming in these conditions.


Does she have internet on her phone?


Do they have computer lab in the university or maybe a public library?


I'm pushing her to go learn/explore programming on her own using her university' computers, but it's a hard sell since she associates programming with something she doesn't enjoy. So far she's only doing it for the good job prospects. Not everybody has to enjoy programming, but in her case the choice wasn't completely hers.


Yeah, many people especially in developing countries dont have the privilege because they're under the pressure of finding a job


Has she ever heard of SICP or similar books?

💯 4

Is she able to write some basic programs or is she totally new?

seancorfield05:09:58 (one of many articles that decries teaching people Java in various contexts)


I agree with Joel on the necessity of mind bending challenges in a CS degree, but disagree that either a student has the ability to do these things or they don’t. If we only select for the population lucky enough to already have a brain — or more likely, childhood background — to support this kind of thinking, we’ll never escape the homogeneity our industry currently suffers from.


(Thanks for posting the link 🙂)


Yeah, a lot of people either self-select away from CS because they think it's boring or they "can't do it" and we as an industry don't do enough outreach to bring more, varied people into the fold. Although it's not just about pipeline either: we as an industry can be pretty off-putting in the way we treat people once they're in the workforce too, unfortunately.


People come out of these classes able to write Java code but often not able to actually solve problems with computers and so they are not actually useful as programmers.


But there are a lot of "developers" out there that are products of these systems, unfortunately, churning out thousands of lines of rote Java code in "enterprise" environments years (nay, decades) behind what modern comp sci / software engineering is all about.

😞 8

Decades ago, a friend of mine went through a Visual C++ course that taught him how to use the visual system builder and he could build large systems easily that did very basic stuff... but he never learned how to actually program in C++ nor how to actually solve problems so as soon as he faced a problem that wasn't "built-in", he was stuck. He came to me one day asking how to write, essentially, four lines of code that performed a particular computation because he just didn't know any of the actual useful basics of programming 😞


So, yeah, @dromar56 I totally get your rant and I sympathize. It's what's wrong with our industry and the education system 😞

👍 8
David Pham12:09:06

@seancorfield I fully agree with your comments, but I mainly disagree about the article: you don’t need to be able to write linked list with pointers on top of your head or knowing all pointers algebra to be a good professional. To me, the article argues that those who can’t deal with pointers and recursion are subpar programmers, but the focus of the problem changed with time: in data analysis/ML, you usually don’t need to know anything about pointers to find good models and solve problems, data visualizations usually don’t even require to understand basic coding principles (html/CSS/JS). Moreover, Clojure shows we can create great artifacts without knowing anything about pointers (and you can avoid explicit recursion with the seq abstraction).

David Pham12:09:48

Moreover, it totally disregards the population who learn to program as a side effect of their own essential problems (most scientists/mathematicians), and they usually uses tools that works to solve their problem. Would we really say those person are not good enough to work in the software industry?


Small contra-rant - I think there is a value to learning to build a chair before you necessarily start thinking about building cities. There’s a lot to say about different things, but using the Java syntax somehow as a sledgehammer against a lot of vague issues seems... not specific and not productive.


For one thing, the way Python is eating the world it seems inevitable that the same issue will be brought up with Python replacing Java in 20 years. It won’t be the fault of the syntax at that point either 🙂


my 2c - best way to turn a person into a real life programmer is to make them solve real life tasks ...


at first with help of some colleagues and then spinning out on their own

David Pham16:09:14

In this case, most real life task (the easy ones at first) don’t require to know pointer algebra...


knowing theory about some parts never hurts, but you can not make people build stuff without any (safe) prior experience. you can't expect a mechanics engineer to build a gearbox that lasts 1000 miles as a first job and you can't learn dancing tango from a book.


my first experience with programming was ultra safe. doodling around with basic back in 1990 ... everything was easy first off and results were quick. that is something that the tooling of today has a real hard time of achieving.


and having stood on the ecommerce front for the last 12 years ... 99.99% of tasks can be solved without knowing anything about pointers, cpu cache sizes, latency of random memory seeks, big-small endianess


common business problems require simple queries from a database, looping - filtering over that data and a few if-s to make the business flow work


Agree re pointers etc (although I wish those low-level mechanics were still more widely taught -- having an appreciation for what the machine is actually doing is a step up on learning how a lot of abstractions work, IMO). I mostly point to his article because of the critique of these rote-learning "Java Schools" that churn out programmers who know the syntax but don't know how to think critically about problems, how to decompose them, and how to evaluate the trade-offs between choices.

👍 16

it's funny you mention that.


mechanical sympathy is the term here.


when you do need to think about layouts of structs/hashmaps, you absolutely need it


it's ok not to for a lot of domains


but the only way to fully know that you, right now, don't need mechanical sympathy is to understand what mechanical sympathy is and how the computer works. or trust someone else's opinions when they make the thing you're using


neither of those are bad. plenty of rails users who don't know how method dispatch fully works in Ruby, and it's ok if that's new to them