933 karma · joined August 14, 2011
_THEN_ I want developers from that company to share their opinions about how they do it. Do such companies/products even exist? Software is so bad these days that maybe no existing software lives up to our ideals.
Are you actually talking about those wiki sites or different ones?
I think the other key to working with clojure is to set up your program as a set of transforms on simple data structures as much as possible such that complex class interactions aren't used much, and that cuts down on the need for great intellisense and static typing. Ymmv, of course, but I've found this way of working more productive than when I was working in Java.
I would go so far as to say many of the people I've encountered who push back on "abstractions" and keep talking about how programming is "about solving problems" are the ones who allow the codebase to slowly go to shit in the name of features, and progress eventually grinds to a halt until a big rewrite. And in my experience, there are _way_ more of these types of people than the ones over-abstracting. Or it's possible my last company was just skewed toward that culture.
Either way, I've only known a couple people who seem to balance these concerns well and they are the best programmers I know.
> A person that confuses a job application with a blog post might get confused about other aspects of work responsibilities.
Are you serious about this? It seems like an extreme over-generalization and very unlikely to be true at all.
I'm not sure why it's different than other programming concepts in this way... maybe just because it's such an abstract concept where most people have no frame of reference. You don't appreciate it until you've used it in a bunch of different contexts and finally see why this one abstraction works for all of them
The example that I've run into most is trying to write functional immutable code in Java. I have just never gotten it to work well - of course there are libraries that have weird workarounds (that aren't compatible with standard data types or libraries), or tons of boilerplate you could write, but ultimately Java just fights you the whole way. It's not really worth going down that path imo, and better to switch to something like kotlin or scala if you can.
1) it's more fun
2) it's good practice as a programmer
3) you get complete control over what content is generated (i.e. can minimize CSS/JS size)
4) you get complete customization - you can make your own way to template things that is convenient for you, or auto-import a particular file format you like to keep for your notes on disk, etc
5) you don't have to learn how to use wordpress
(It's not to say I think using wordpress is bad - if you like it, use it!)
A lot of companies hire remotely these days, or are totally remote (Gitlab comes to mind).
Two things I would recommend if you are open to advice:
1. Consider the possibility that you have some skills to grow to achieve more senior levels. Confidence helps, but it's not enough on it's own.
2. Interview at other companies that don't require you to relocate to see what you're worth - switching jobs is (sadly) one of the easiest ways to get promoted or a pay raise.
Good luck!
Many people who grew up rich have a natural confidence to them (because they are protected if they lose their job, have been told they'll be someone important one day, given lots of help in life), and that helps a lot in giving a vibe that you'll succeed.
The great thing is that the confidence can be gained even if you didn't grow up in the same circumstances, it just takes more work.
That said, if I were cleaning an office building I don't think I would want everyone chatting me up - just kindly get out of my way when I'm trying to clean something but otherwise I don't see it as rude to not engage with me when I'm doing my job.
That's all I could think about when reading this post.
edit: Maybe the point of the post was not losing touch with reality or becoming an ass to people when you start making money (which I can agree with), but they also came off a bit self-righteous to me.
By the way, my example was meant to be more like User -> User where there are some string values and some other types of value. You want to do the transformation in a generic way, but still have the type-safe object come out the other end with all the expected keys.
One good example is where you might treat records or "product types" as maps
Let's say you want to write a function that can capitalize all the string fields in the object passed in. In a dynamic language, you could map over the values and apply capitalization trivially. It would be a one-liner.
In a static language, you'd have a few options, but none are great:
1. You could use "reflection" or some dynamic feature to do this, but lose type-safety
2. You could make the function take in the union of all possible data types in your system, and then write a mapping function for each one. Then you're duplicating the logic N times, or at the least writing a lot of conversion boilerplate.
3. You could write two functions for each data type in your system to convert to a Map<String, Object> or some such and back, which lets you operate on the maps. Again, lots of boilerplate. Maybe you use code-generation for this? That would add complexity.
In reality, you probably wouldn't even try to write such a function in a typed language because of how awkward it is. Maybe you'd just write specific translation functions for the records you know you happen to need. But I think that's what people mean when they say you're restricted by the type-system - because it can't verify those types of operations, you find workarounds when maybe that would have been the easiest way to implement something.
I don't think we as a society should be this sensitive/prone to suggestion. If anything, I believe the censorship promotes the idea that people have no responsibility to make their own choices, and we must build to the lowest common denominator.
Note, I'm not really making a judgement about whether Apple should be allowed to do this - I think that is harder question.
i genuinely thought it was that important, but looking back it was really not a big deal at all (and the judge knew it) :)
That said, I could only nod along with the first half of your comment - the rest started to get a bit condescending.
I mean, you do you - if this working style works for you, that's great! But I think you can still work on your craft and be a perfectionist while appreciating how others want to work as well.
1. If I'm struggling to start, telling myself I only need to spend 25 minutes on it gets me started
2. I can pretty easily hold myself back from checking slack/email or context-switching when the block is 25 minutes - I can always peek at messages after to make sure nothing important happened.
3. It gives me a target - frequently there is something concrete I think I can _complete_ in 25 minutes, and that gives me motivation to push to get it done by then. If it goes a little over, that's fine
4. Because these periods of 25 minutes are really intense, I can't do them back-to-back all day. I have found switching to an interesting YouTube video for 5 minutes during a break (and trying to completely rest the brain during this time) re-energizes me more quickly, and lets me do more pomodoros without needing to stop for a while