Im too sick to be coherent but just do it. Even if all you do is write documentation or fix misspelled words. Get started. First step of millions miles journey or something. 

On Jan 20, 2018, at 2:18 PM, David Schwartz <newsletters@thetoolwiz.com> wrote:

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 <trent.shipley@gmail.com> 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://github.com/Frege/frege). 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 - PLUG-discuss@lists.phxlinux.org
To subscribe, unsubscribe, or to change your mail settings:
http://lists.phxlinux.org/mailman/listinfo/plug-discuss

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