Back in the 80’s there was a library I used that I really loved. The author was 
clearly dedicated to supporting it and was very active on their discussion 
forum, and was constantly helping people fix problems they had with the code. 
(It was a ‘C’ library.) He was constantly releasing updates at a pace that I’d 
feel challlenged to keep up with.

I went to a Software Developer’s Conference and this company had a booth, so I 
swung by to meet the guy. I turns out he was quite disabled. He reminded me of 
Stephen Hawking. He may have had ALS, I dunno. Nobody said, and I didn’t ask. 
There was also a close buddy of his there who I guess was his “caregiver” of 
sorts. Sadly, this guy appeared quite drunk most of the time. I suspect he may 
have been an alcoholic, which must have been quite frustrating to the software 
guy. (Unless he had some disability himself, but at the evening parties where I 
saw him, he was going through beers pretty quickly.)

Like Hawking, here was a brilliant mind trapped inside of a dysfunction body, 
and he discovered that software was a great way to keep himself occupied and 
engaged in the world. Not to mention that because this was a fairly popular 
library, it brought in a nice steady income for these two fellows. 

It’s not uncommon to find disabled people who’ve accumulated lots of academic 
creds. In this case, I’d say it’s more a reflection that there’s a sharp mind 
trapped in a dysfunctional body doing its best to keep itself occupied in a 
positive way.

The failure here is probbably on the part of the not-so-sharp minds trapped in 
fully-functional bodies who probably see their jobs in supporting these people 
(as “case workers” and “coaches”) as little more than pacifiers, keeping folks 
like Trent modestly occupied and engaged enough so they’re not much of a bother 
to them. That would infuriate the hell out of me if I were disabled.

Software is a perfect domain for lots of folks with physical disabilities to 
engage in because most of the activity around software is going on in our heads 
anyway.

I was quite shocked to find that the developer of that library was so extremely 
disabled that he couldn’t even talk and had extremely limited physical 
abilities. (I seem to recall he had some kind of beak or stick he wore on his 
head that let him tap on keys on the keyboard. This was pre-Windows before mice 
were in common use. His typing was very slow and labored. Yet he managed to 
write all of that software and help people online and everything anybody else 
would do. He was just very slow at it, although in the end that didn’t matter 
in the least.)

That said, find a project you like that’s in a direction you want to learn more 
about, and just take it on.

If you can take classes that help you learn, all the better. Don’t worry about 
your academic background. However, it would be good to have a few core Comp Sci 
courses under your belt.

It bothers me that our educational system has become somewhat bifurcated, in 
that it’s teaching core Comp Sci topics as part of a larger educational 
curriculum but ignoring them at the other end where they’re starting by 
teaching “coding” and never go very deep with the theory.

People need to be able to learn core Comp Sci subjects without being encumbered 
with all the other crap required to get a Bachelor’s Degree. Unfortunately, AA 
degrees are just the first 2 years of a BS program, and they only include about 
1/2 of the core CS material.

What’s preventing this from happening is a shift in the industry from hiring 
people with core competencies to hiring people who’ve mastered superficial 
skills — you don’t need core competencies to become highly facile with runtime 
libraries that allow you to crank out code really fast.

But all of that code you end up cranking out may not be structured very well 
because you have no underlying core competencies! This is what people are 
totally missing, thanks in large part to those who’ve risen in the ranks 
without the core competencies and therefor are competely blind to their value.

(“Hey, I’ve never had a compiler construction course, and that hasn’t hurt my 
performance over the years!” Well, this person probably never had anybody with 
any background in compiler construction or finite automata theory look at their 
code where that stuff would have helped them and pointed out how horribly it 
was structured and how hard it is to maintain.)

You don’t recognize that some particular task requires things taught in a basic 
data structures course, or you don’t see the algorithmic complexity of 
something you’re building because you never had an analysis of algorithms 
class. With no formal set theory background, you don’t have any grounding in 
how to write efficient SQL queries. With no formal language theory background 
taught in a compiler construction course, you have no understanding of 
tokenizing and parsing streams of input data.

This lack of foundational background does not prevent you from writing code. It 
simply prevents you from recognizing various tasks as belonging to a larger set 
of already recognized and well-understood tasks that have been studied and 
their various structures and dynamics carved out for them to adapt as a “best 
practice”.

The one class that probably had the most relevant impact on my professional 
life was called “Discrete Math Structures”. It was the most boring and 
seemingly irrelevant class I had in college. But it ended up being the basis of 
most of the work I’ve been involved with throughout my career. It was all about 
“counting”. You’d think, “what a boring-ass topic!” Perhaps, but what I learned 
there forms the foundation of just about everything I’ve ever done in 
programming.

The point is, when you attack programming from the coding-side — mastering a 
language and libraries rather than fundamentals — you never really learn the 
fundamentals, other than a little by osmosis.

I used to get hired by people who said, “Oh, you’ve got a Computer Science 
degree. You can learn anything!” and they didn’t give a rip what languages or 
libraries I knew. Today it’s just the opposite. People want to know how fast 
you can hit the ground running with their particular “stack” and they tend to 
hire people who have the LEAST TO LEARN. Then they wonder why their code base 
is big and fat and slow and hard as hell to maintain, and why their development 
schedules seem to stretch out to oblivion.

If you can take some core Comp Sci courses without having to be enrolled in a 
BS program, I encourage you to do that. Even just one a semester. there are 
only a handful (6-8) and they’ll make a huge difference in your ability to 
learn new stuff going forward. THIS is the “core” of Comp Sci — not the rest of 
the crap you have to take to get your degree, like Sociology, Psych, and 
English Lit.

Spend some time learning these core competencies and you’ll find yourself far 
better for it down the road. That approach won’t get you a degree, but you will 
find it much easier to approach new langauges and platforms and come up to 
speed faster. 

Because in the end, everything in the software world really is based on some 
core foundational theories and disciplines. For example, every imperative 
programming language is structured the same, and if you understand compiler 
theory, they pretty much all look and work alike. 

They didn’t teach parallel programming, multi-threading, and stuff like that 
when I was in college, but they probably do today.  That would be a great class 
to take if you’re trying to learn something like Haskell and how to leverage 
the use of highly distributed parallel processors, even if they’re arrays of 
CPUs on GPU chips. 

I believe it’s not so much your familiarity with the language and run-time 
libraries that get you ahead, but rather the underlying theories that the 
languages are usually based upon that inform a lot of your decisions in these 
cases.

So, yes, pick an open-source project to work on and focus on something 
concrete, like R or Haskell or whatever. But spend some time learning the 
foundations upon which those technologies are built.

-David Schwartz



> On Jan 19, 2018, at 9:59 PM, trent shipley <[email protected]> wrote:
> 
> At present I am working through an introduction to R and an introduction to 
> Haskell. Both are fun, but Haskell is more fun--and harder.
> 
> I'm about a quarter of the way through each textbook.
> 
> I'm also in DES's Vocational Rehab, because I have three disabilities, two 
> master's degrees, and work as a telephone customer service representative for 
> low wages. My vocational rehab coach wants me to start contributing to an 
> opensource project ASAP. I'd like to contribute to Frege (Haskell for the 
> JVM) but it will be weeks before I can finish the Haskell book, and then I'd 
> still be a newbie. The most advanced training I have is a community college 
> certificate of completion in computer programming, so I'm not that 
> sophisticated or experienced a programmer. I am having trouble convincing my 
> worker that making a meaningful contribution to an opensource project is 
> actually a daunting proposition in most cases. Is anybody looking for an 
> entry-level contributor to an opensource project?
> 
> Anyway, there are opensource projects I'd like to work on.  One is extending 
> and documenting Frege 
> (https://u2206659.ct.sendgrid.net/wf/click?upn=3cK2FVJjyu2N-2Bxco034fZrrYKskBoDse0NQhf-2FhO68A1Z4BXmqM-2F5GtXeKjNCj2m_6lpMB7VLnN-2Fj9-2FEErg8-2F-2BMBpb5QxlByTgv2M3fbWD9ebvC-2BWrN3h7jImK8EVWYBeuezmM-2FbZmX-2FOxPb9DW3bkpZh1NatGpYcKhzJQyVVX3Bgul2h5xnUmTKqktLSu9tY4pFgN5ybMbCxX6whvhKfd-2BQDRwbKGfTfggemIG3QydNoRn-2F2UEknUvTfv-2FbgO8zEVmaoGtcqoWaUG5lVYPmjxeXp1kQDR1wNSidmGOX6Kvk-3D
>  
> <https://u2206659.ct.sendgrid.net/wf/click?upn=3cK2FVJjyu2N-2Bxco034fZrrYKskBoDse0NQhf-2FhO68A1Z4BXmqM-2F5GtXeKjNCj2m_6lpMB7VLnN-2Fj9-2FEErg8-2F-2BMBpb5QxlByTgv2M3fbWD9ebvC-2BWrN3h7jImK8EVWYBeuezmM-2FbZmX-2FOxPb9DW3bklcKKwDlslJLD3Bbl0L9y-2BGVAJffINqR-2BFCrdgX0ZQ-2F5t4n1-2FcdKMA-2FN00F7ATDbhC-2FjOco29ITd-2Fi0HuN2fJdtDsckJBiWX4yTuRHx9mNRrnUn8w8qk2PjcYi2nOwpsSAhWtA5NN44jJLqynJGEf9g-3D>).
>  They want Haskell plugins translated into Frege+Java. The project, 
> unfortunately, seems moribund. No matter, maybe it would be possible to 
> "borrow" directly from the GHC after going over a compiler textbook with 
> exercises.  Of course, what one would REALLY want would be a JIT Frege 
> compiler, and I have a feeling you won't get that by slavishly translating 
> the GHC.
> 
> The other, rather harder, project I want to work on is translating, then 
> modifying and extending Peter Sestoft's Funcalc (Spreadsheet Implementation 
> Technology: Basics and Extensions, 2014). I have some idiosyncratic ideas of 
> what I want to do with a functional language that is a spreadsheet.  I want 
> to target the JVM, and write most of the compiler/interpreter in a functional 
> language. I'd use Frege + Java but Frege isn't nearly mature enough. I expect 
> that if I ever do it, I'll use Kotlin + Java. 
> 
> That implies that future projects are going to be learning to write compilers 
> and learning to code in Kotlin.
> 
> How might someone with the equivalent of an AA in CIS (not CS) emphasizing 
> programming get competent at (human) reading and (human) writing of 
> lexers-parsers-compilers-linkers? What are prerequisites.
> 
> Does anyone have favorite compiler textbooks? Any compiler textbooks they 
> really hate?
> 
> 
> Regards,
> 
> Trent Shipley
> ---------------------------------------------------
> PLUG-discuss mailing list - [email protected]
> To subscribe, unsubscribe, or to change your mail settings:
> https://u2206659.ct.sendgrid.net/wf/click?upn=5DvWGaZUY8Sh5aRLWfQTKYiRLVzunonVk948p8WIzMe-2FXlJ9Cta8w8U9xoku9LrUSHNMJbSd3ZEwH-2BqnW2UHlA-3D-3D_6lpMB7VLnN-2Fj9-2FEErg8-2F-2BMBpb5QxlByTgv2M3fbWD9ebvC-2BWrN3h7jImK8EVWYBeuezmM-2FbZmX-2FOxPb9DW3bkvi7UI5hkMBf5rdsNvJB78ZIyhFSEsPRtvrp9A1y9ky5-2BrdiZYuWlyKtaZ7x-2F7ElTeKc8MkWoe3r8-2BqfFbR2AqTFOlR8e7-2FyPybOT861LxB2Idvbu5HSKPe10fELjw0RROfmM-2FCmMkY34mugovRIkVk-3D

---------------------------------------------------
PLUG-discuss mailing list - [email protected]
To subscribe, unsubscribe, or to change your mail settings:
http://lists.phxlinux.org/mailman/listinfo/plug-discuss

Reply via email to