
Teaching foreign policy majors to code - nkurz
https://medium.com/@cfmccormick/teaching-foreign-policy-majors-to-code-2a55bbda6ee0
======
f4stjack
I must say I am conflicted to write on this subject. On the one hand I am a
person who has a humanities background turned to coding (bachelor's on
philosophy; master's on sociology) but on the other hand I am burned out now
and unwilling to do anything code related thanks to previous employers so my
outlook isn't a nice one.

The problem I experienced was most of the companies want a bachelor of science
or an engineering degree on their job postings. I think this is because the
workshop kool-aid has proven ineffective in creating good programmers but
rather code workers who are good at menial jobs but unable to provide good
solutions. So if a foreign policy major decides to go full on coding by self-
teaching skills to himself he'd get slaughtered on job applications, without
being able to show his skills on the technical interviews.

Secondly, the job politics of most companies are just dreadful. After all
those humdrum job interviews, skill tests, certification badgering; what I
experienced is writing code that generates a sql query to the parameters
that's taken from the frontend which had NOTHING to do with interview
questions or the skills demanded by the employer.

In sum, I have to emphasize that these are my experiences and maybe limited to
where I live and tried to earn my keep by coding. So I hope that it is a local
thing and where you live has a better environment when it comes to employing
programmers who are outside of the field.

Thanks for reading anyway.

~~~
mikekchar
I've been programming for the vast majority of my life, professionally for
something like 30 years. I've done other jobs as well. My general advice to
people thinking of becoming a programmer: Go ahead if you like programming. If
not, then there are almost certainly better jobs than this.

Don't get me wrong. On paper it's attractive. Quite high salary. Casual dress.
Often flexible hours. No heavy lifting. High demand for skilled workers.

On the other side: You have to concentrate to a level that most people can't
even understand -- and you have to do it all day, every day. Nobody
understands what you are doing and most people under appreciate the difficulty
(which is actually a huge understatement). Many managers believe that the
reason things are going more slowly than they would like is because you don't
have enough stress in your life. Unfortunately, the reality is that while you
don't have much day to day stress (unless you are are in dev ops), you have
ridiculous long term stress. No matter what you are working on, you don't have
enough information to do your job. As soon as you learn enough to do your job,
the job changes. Your tools change on a yearly, if not monthly basis -- and
the amount of learning necessary to get good at your new tools is a full time
job in itself. On top of all that, the field is immature to the point that it
is likely that every single person on your team has a different way to solve
every problem. And they are all convinced that everybody else's solution is
crap. And they are _all_ correct (pause to let the implication sink in).
You're going to get it wrong almost all the time, and it will take you
something like 30 years (if I'm any measure) to realise it. But even when you
finally figure something out, _nobody_ will listen to you, because they all
think you are wrong (and they are probably correct about that too).

It's a terrible job. Only do it if you really, really want to do it.

On the other hand, I've known a few people who are able to clock in and clock
out, do a competent job, and not get too stressed about stuff. I'm still
trying to figure out how they do it.

~~~
throwawayjava
_> On the other hand, I've known a few people who are able to clock in and
clock out, do a competent job, and not get too stressed about stuff. I'm still
trying to figure out how they do it._

This is an amazing skill I only learned during a PhD, and only after burning
out half way though.

Obviously, step 0 is clear boundaries and reasonable work hours. Clock out at
5 or 6 (or 7 or whatever -- point is, put in your 40 hours and leave).

After that, things get more difficult.

For me, the answer was to work out _directly_ after work (so before the
commute home even!) and to listen to an interesting audiobook/podcast during
my workout.

That way, when I got home, I would have something on my mind other than work.
Fortunately, my personality is such that as long as the audiobook/podcast was
interesting, that's what I will focus on/think about the rest of the night.

~~~
dvlsg
Working out before going home works great for me, too. And it has the added
bonus of helping you skip some of the traffic on that commute home by pushing
the start time of that commute back a bit. Depending on where you live and
when you work, I suppose.

------
analog31
>>> More broadly, this illustrates that there are hidden traps of confusion
and misconceptions among first-time programmers that are very hard to see if
you’ve been programming for a long time.

This may happen in other subjects as well. I taught college math as an adjunct
for all of one semester, and discovered to my surprise:

1) None of my students knew the meaning of "show your work." Hint: It doesn't
mean turning in your scratch paper along with the answers.

2) When I asked the math professors how to explain "show your work," some of
them bluffed and blustered, but none of them could give me a straight answer.
At worst, I got, "they should just know."

~~~
throwawayjava
_> 2) When I asked the math professors how to explain "show your work," some
of them bluffed and blustered, but none of them could give me a straight
answer. At worst, I got, "they should just know."_

It sounds like you were teaching calculus or maybe college algebra ("they
should know" is actually good advice for the higher level mathematics courses
-- most departments have a whole course that's more-or-less about how to write
proofs).

At research universities, the tenure-track professors rarely teach anything
below Calc II, and might not teach any Calculus courses at all. Certainly
nothing below Calc I.

If you ad junct again, consider asking the other ad juncts/instructors
instead. They're more likely to have lots of exposure to that university's
demographic in a relevant course.

~~~
pc86
I'm not conceding that it's reasonable for a professor to answer something
with "they should just know," but I think the issue here is that they seemed
_incapable_ of explaining it. It's one thing to say to a class "you should
know how to $x, so I'm not going to teach it to you right now" but another
entirely to be either unwilling or unable to explain exactly what they mean to
a colleague.

~~~
throwawayjava
Keep in mind that teaching is its own skill. Especially in universities, that
skill can get awfully specific awfully fast.

In particular, for a TT professor at an R1, odds are _extremely_ good that
they've _NEVER_ taught anything below calculus and may have never even been
the instructor of record even for calculus courses! They were hired to do
research and teach graduate/upper-level undergraduate courses.

Teachers that know how to explain and assess everything in a graduate analysis
course with perfect clarity might not know how to handle the situation where a
student doesn't know what it means to "show you work" in the context of
calculating a derivative or solving a linear equation. In fact, they might not
have even thought about learning/teaching that material themselves since early
high school or maybe even middle school. This doesn't make them a bad teacher.
It just makes them a bad calc I/college algebra teacher. Which is okay --
teaching those courses is not their job and is not what they were hired to do.

So this is somehow a bit like complaining that a web programmer isn't
particularly adept at kernel hacking. That doesn't make them a bad programmer,
it just means they focus is elsewhere.

Again, most universities do hire experts in teaching the lower-level courses.
They're just not typically tenure-track professors.

~~~
analog31
Indeed, the professors are either surprised or offended that the university
even offers college algebra, which they obviously never had to take, and which
they consider to be a few levels below remedial.

Admittedly, I was a math major in college, and was unaware of the existence of
college algebra until I was hired to teach it.

------
crooked-v
Starting off with C? Ow. R or Python seem like they'd be much better choices
for something students would actually use in the future, given their data
analysis tools.

~~~
ummonk
Or Julia if you want to prepare them for the future.

~~~
nerdponx
I'm a big fan of Julia, but I wouldn't say that it's a great introduction to
programming. Python is the way to go IMO, unless Julia really takes off.

~~~
ummonk
Why isn’t it a good introduction to programming? It has a really consistent
syntax, and polymorphism via multiple dispatch is a lot simpler to learn than
polymorphism via classes imo.

------
superkuh
I understand why the teacher in this case hid the coding requirements of the
course. His reasoning makes sense. But I'm not sure it was ethical
misrepresenting the course even for the students own benefit.

~~~
mingee
Is it unethical to do something if all parties are happy? Does it only become
unethical when a party has been tricked and become unhappy, or is tricking
somebody even for their own good unethical? In that case, what would be your
definition of ethics?

I don't have a strong stance whether his decision was ethical or not, just
interested in seeing your opinion as you seem to be implying that it might not
be :P

~~~
evil-olive
Is it unethical for a professor to lie to their students?

Yes.

Is is still unethical if the professor argues that the lies were for the
students' own good?

Yes.

Is it still unethical if, a few months into the course, the professor tells
the truth?

Yes.

Is it still unethical if, a few months later, the professor tells the truth
_and_ one or more students says "you know, I understand now why you lied to
us"?

Yes.

This really isn't a challenging conundrum. The student-teacher relationship is
a special one. There are expectations that need to be fulfilled on both sides.
One of the most basic ones that can be expected of a teacher is _don 't lie to
your fucking students_.

~~~
andybak
Possible overreaction alert...

~~~
deanmen
Lying always being unethical is actually a relatively standard idea in
classical ethical theories e.g. Summa Theologica, Question 110, Article 3.
However, the statement that the class involves "no coding" could be considered
truthful in the social context or as part of a use of mental reservation.

~~~
Thiez
Lying can be perfectly okay under consequentialism, which also goes way back.
Personally I'm not very convinced of ethical theories where lying is unethical
in all circumstances (sorry Kant), and I suspect I'm not the only one. Stating
that there exists an ethical theory that supports your point just isn't very
convincing for people who don't subscribe to that particular theory.

------
blauditore
> Lesson #2: the basic paradigm of code (strictly sequential execution, with
> flow control and function definitions) isn’t always intuitive and should be
> explained clearly to first-time programmers.

That's a good point. I like to tell programming newbies (or just other people
who don't know what software development is) that a computer program is like a
cooking recipe: It defines step by step what to do, and someone (the computer)
executes it.

------
jmickey
What about teaching coders about foreign policy? Now that sounds exciting! :)

------
golergka
> Another problem was that I used several different ways to do the same thing
> in the code, without being clear about why. For example, I declared some
> parameters as constants and others (which weren’t being changed) as
> variables — mostly because I was being sloppy.

That's why C or especially C++ is probably the worst possible language to
teach programming.

Also, be frank with your students from the beginning about one thing: there
are areas that they should understand, and then there are areas that they
should just treat as "magic" and not go into, on a certain level of
development. Not because they're really magic, but just keep first things
first.

------
msaharia
I think the Professor is vastly overestimating how much his students benefited
from this exercise. What they need are data analysis and modeling skills. R +
Rstudio would be the perfect tooling for them. Laudable goal nontheless.

~~~
the_watcher
That would not have been useful at all in the course - which involved
programming an actual device, powered by an Arduino.

~~~
msaharia
Exactly what I meant. Why would foreign policy majors need to know how to
program an Arduino. I can't think of a single reason to.

