364 karma · joined April 18, 2015
[ my public key: https://keybase.io/chkhd; my proof: https://keybase.io/chkhd/sigs/45ofWcV9a5YlGuOUrVOvjfYC_PT93HeTSVumn9gC9Jg ]
Note: No longer in use, new identity: https://keybase.io/chkhd
If I work on a project where functional programming with emphasis on purity is required I will much rather go to ML family, which I think offers more natural way to express ideas in functional paradigm with beauty and integrity not even Lisp can match.
I write portable code and use libraries which abstract away implementation specific stuff so it will be easy to run on any other conforming implementation should the need arise.
The community is quite responsible when it comes to portability and utility libraries which help with it, but on top of that Quicklisp maintainer tests library compilation on most major implementations and reports bugs.
I found lack of high quality library documentation a bit annoying, but a non-issue, there were tests and/or examples included in practically all of the libraries I have used so far.
Lastly, this rarely gets brought up, but I think Common Lisp has some of the best books available out of any programming language. The fact that it is so stable means that most of material, and code, from the end of 80's and 90's is quite relevant today, and new stuff is being written.
The biggest downside is that it makes JavaScript and Python revolting to work with. But I can still enjoy SML for example.
- I can completely disable all controls, notifications, status bars and the like. This leaves me with less noise and allow me to focus on the applications at hand. But usability does not suffer, I can display whatever information I like, when I like with a simply shortcut. F.e. If I need to take a look at the date I just hit `C-t d` and it shows up.
- I can assign shortcuts to applications. For example, wherever I am, whatever is on the forefront I can hit `C-t f` and Firefox will show up, I hit it again and it will go to another Firefox window if there is one, terminal is `C-t c` and so on. I stop doing window management altogether and work on higher level.
Note also that StumpWM does manual window management, while it sounds tedious, in fact it is a delight. You have all your stuff exactly as you like it without the WM trying to guess anything.
Speculation here, the Einstein of this century will be a programmer.
Setting up something complex definitely takes time and has its cons but that time is definitely finite, I am not saying that I magically got to my setup, it did not take me a year either. And once it is yours, it is yours. Moreover, when the environment is easily extensible like Emacs and StumpWM are it is easy to mold them to a new task that lands on your table.
My workstation is my IDE. Or as close to it as I can make it.
> As for operating systems, window managers etc., I couldn't care less
And we should not have to. So I personally go out of the way to rid my workstation of stuff that is not what I care about.
The reason is that these environments are designed with user-friendliness in mind. Now what does that mean? it means that stuff should be easy to find, simplified enough for somebody who is learning how to interact with the machine, trying to remember what, where and how. As a professional programmer you should not care at all about that. You are not a user, you are a frigging master of the computer universe.
You should care about avoiding unnecessary clutter so that you can focus easier, minimizing time from thought to action to avoid breaking the flow, about flexibility so you can adapt the environment to your personal needs and increase productivity. Erik Naggum nailed it long time ago [0].
You can have a tablet and do your non-work related activities there, iOS, Windows, whatever, but when you are working use your workstation! if you don't have one create it. You will be amazed by how much more productive you can be, how much happier you can be.
I use StumpWM, Emacs, Conkeror, Ergodox with a custom layout and blank keys, and a trackball. The only thing a "user" can do on my machine is move the pointer and pull out the power cord, but in my hands this thing flies!
[0] http://www.xach.com/naggum/articles/3065048088243385@naggum....
Edit: Let me be clear, this is my personal journey from Windows to MacOS and finally to a custom setup on Linux and the reasoning behind it. I certainly do not mean to preach.
I concede that thinking hard is and always will be the main component of professional work, but perhaps from time to time we should ponder what an environment could be like if it was made for professionals not for users. If we simply keep accepting what is available and let others think for us we will only get more of what Apple does and less of what might be best for us. We are not the majority of Apple users, and probably never will be, it is not in their best interest to put us ahead of them when making various decisions.
f.e. I really like my current job, so I would benefit from getting a better look at your workflow and interact with the team to decide if I really want to work for you.
Hopefully the situation will improve in the near future, but I am so taken aback with common practice that I currently see no other way but to start my own company, I just cannot imagine working for such stubborn and close minded people. And for darn sure when I hire, this will be the process.
"... they don't make poles long enough for me want to touch Microsoft products, and I don't want any mass-marketed game-playing device or Windows appliance _near_ my desk or on my network. this is my _workbench_, dammit, it's not a pretty box to impress people with graphics and sounds. when I work at this system up to 12 hours a day, I'm profoundly uninterested in what user interface a novice user would prefer. ..."
You can just plug in Apple here instead of Microsoft and the truth still reigns. Now obviously Apple is not targeting professional developers with their products, no matter how much you try to pretend that they do, just stop, stop accepting inferior tools for doing stuff that puts food on your table, no other field is as bad at it as ours.
[0] http://www.xach.com/naggum/articles/3065048088243385@naggum....
1. Do you think the area of HCI is stagnating today?
2. What are your thoughts on programming languages that encapsulate Machine Learning within language constructs and/or generally take the recent advancements in NLP and AI and integrate them as a way to augment the programmer?
You can be a hacker and get by with very little math, depends what you are hacking. Hacking is not a profession, it is more of an approach to things, a way of looking at the world, the joy of really figuring stuff out and maybe doing something cool, something that might have seemed impossible. This does usually involve mastery, but not necessarily of mathematics.
I think the question you should be asking, or maybe are even asking is - how much mathematics do I need to hack the hack that I want to hack? - and the first thing you need to do, if you have not already done so is try to think about what that might be. Even a vague idea will give you plenty of clues about how much of what you might need for that.
If you find it troublesome, check out what Richard Hamming has to say about it, it should help you out a lot with figuring it out [1][2].
That said, if you want to do computer science, or hack on the interesting things you do need quite a bit of mathematics. This is due to the fact that, as other posters here have pointed out, what you are really in need of, is an effective way of problem solving, and to solve a problem you need to understand it, model it, work on it in some terms. Mathematics is /the/ method of clear thinking which you should apply in order to do this. Sure, you can do certain things without mathematics, but you are not making things any easier for yourself by doing that, and more importantly you are not gaining as much insight as you would have if you used the mathematical approach.
Now, you do mention that you are not good at mathematics, do not let that discourage you, there are many people who were, or are in similar situation as you, me included, and I can assure you that with some dedication and open minded thinking, it comes easier than you might think, and all this effort almost instantly pays off. If you are familiar with one or several programming languages, check out these amazing books and use them alongside whatever mathematics course you will be taking, they will help you out immensely by helping you master both the problem solving approach and the necessary concepts in order to succeed in mathematical education [3][4][5].
[1] https://www.youtube.com/playlist?list=PL2FF649D0C4407B30 [2] http://worrydream.com/refs/Hamming-TheArtOfDoingScienceAndEn... [3] http://www.amazon.com/Language-Mathematics-Utilizing-Math-Pr... [4] http://www.amazon.com/How-Solve-Mathematical-Princeton-Scien... [5] http://www.amazon.com/How-Prove-Structured-Approach-2nd/dp/0... [6] http://www.amazon.com/Methods-Mathematics-Calculus-Probabili...
Recently, after watching R.W. Hamming lectures and reading his book "Art of Doing Science and Engineering" [1] [2] decided that I would try learning mathematics again.
I found it really hard to do. There are so many implicit assumptions, so much ground that is not covered. I was about to give up again, when I found a book [3] by retired computer science professor, who seemed to have written it specifically for me! it really felt that way.
Now I recommend it to almost everyone, especially tech-savvy people. I am no longer afraid of mathematics, with the help of this book, and great advice by Hamming, I am finally "getting it". If you find learning new programming languages easy, but struggle with mathematics, check it out!
The book is not aimed at teaching you mathematics, rather, it teaches you those missing pieces, that almost every other book either assumes you already know, or describes vaguely and badly, gives you context and valuable advice. To me it almost feels like it is teaching you a functional programming language. A strange and very flexible programming language, with its warts and all. You learn the language, and then you can go on to explore programs written in it, algorithms, data structures whatnot.
My ultimate goal is to, at least, learn enough so that I can really understand books by Hamming, especially "Methods of Mathematics Applied to Calculus, Probability, and Statistics" [4]. And, of course, to do interesting projects along the way, now that I am starting to understand some of the research papers.
[1] http://worrydream.com/refs/Hamming-TheArtOfDoingScienceAndEn...
[2] https://www.youtube.com/watch?v=AD4b-52jtos&list=PL2FF649D0C...
[3] http://www.amazon.com/The-Language-Mathematics-Utilizing-Pra...
[4] http://www.amazon.com/Methods-Mathematics-Calculus-Probabili...
Emacs to me, first and foremost, is a doorway to another dimension, a place you can escape to from the absolute drudgery of the contemporary software development.
...A relic, yes, but it seems as alive as ever, a dark block inside it, blinking, like a pulse on a medical instrument...
It is also a glimpse into what professional tools might be like, if they were not so obsessed about beginner users. [1]
...You wonder what the hell you should do with it...
[1] I think Erik Naggum kind of nailed it in http://www.xach.com/naggum/articles/3065048088243385@naggum....
I worked for a lot of companies for the past 15 years, but this is the first time I find it hard to change my job - because working remotely is amazing.
I wish more companies were open to letting people telecommute. I had office based position offers that paid twice what I make but I am never trading that for the ability to get out of the room and hug my daughter. And the productivity argument is still there, it is just not the sole reason why remote rocks.
One of my other favorites: Work is very stressful sometimes, so I go out to a different room and punch my training bag a few times. Instant stress relief - try doing that in the office!
P.S. If you are reading this and are considering hiring for a remote position, drop me a line, I am a sysadmin with a fair bit of coding and extensive networking (Cisco) and teaching/mentoring background, living in central Europe, and I grok programming and web development.