The thing is that visual metaphors don't scale. And when the problem gets too complicated for you to visualize it accurately, if you can't do the chain-of-steps-on-paper approach, you're stuck.
So, this approach may be fine, to get kids interested in mathematics and give them some intuition about what's going on. But an actual education can't stop there.
I feel like we let new engineers down by not guiding them toward resources where they can improve their social/writing skills.
Where is the brilliant.org for social/emotional/communication skills?
Social skills are presented as an obvious thing and the lack thereof is grounds for ridicule and derision rather than pointers to resources. (Note: How to win Friends and Influence people is a good base, but the Harvard Negotiation Project has many more good books. Also, Charisma on Command is a great youtube resource)
We have them be taught writing by literature majors who insist there’s some meaning to blue curtains but can’t be bothered to explain why or what the principles behind making that judgement are. (Note: a great explanation of how symbolism works can be found by putting “extra credits symbolism” into google)
I think it's important to separate the skills out. Communication, social, and writing skills are three different things, and it's quite possible to learn all three without a literature class. You can thank the middle school and high school curricula for the unfortunate association.
Once you're in college, you can get the writing without the symbolism by taking writing classes, especially creative writing ones. But I amost never saw engineers do it, often out of a "what am I going to do with it? Write short stories for my documentation?" reaction. Their loss.
After college, there are plenty of books and classes you can take, but like programming it often comes down to practicing and getting feedback. There are websites and your local area likely has writer circles. You can get into short story writing and you'll get good feedback from others. Unlike programming, writing is an inherently social activity. In order for your writing to work, it must pass through the lens of another human.
I disagree that writing is undervalued. I think that writing is highly valuable and highly rewarded...but that the path to overcome challenges with writing is bafflingly mysterious. Does anyone know of a therapist who has experience helping people overcome writing anxiety?
I genuinely don’t know how to find one. Therapist-shopping is baffling.
I ask this as a software engineer who can produce pretty solid writing if given enough time but for whom doing so prompts thoughts of severe self harm. I was pushed to resign from my last job as a result of handing in a nearly-blank self-evaluation during my company’s performance review process, so I’m willing to spend... I guess up to $8k, (maybe more? Anything’s better than suicide to be honest. I love life in general and suppose it would be rational to spend half my income to eliminate the risk of it) On getting this finally solved after 2 decades of occasional agony.
I used to help coach college friends in their writing. Often their first drafts would have complicated pretentious sentences that really weren't even parseable as sentences, and first I'd ask them, "What do you mean here?" And then when they'd explain, "Write that down!" Perhaps something like that would work for you, to help take you from a "composing" mindset to a "conversing" mindset. You could even record yourself or use some dictation software. It may even make your writing easier to read.
It might also reassure you that professional writers often say, "There is no writing, only re-writing." The first draft is never the final draft, so you don't have to take it seriously. Just jot down whatever comes into your head. Some people start with an outline, scattered words with arrows connecting them, questions to answer, blank spots, etc., whatever helps to keep you moving forward. Getting started is the hardest part. Keats used to chain himself to his desk to force himself to write something. Sometimes it even helps to set yourself a silly challenge, like randomly open the dictionary ten times to pick ten words you have to include. They don't have to make it into the final draft---but they could. :-)
You might also want to read some books about good writing. Strunk & White is good. Their advice is "keep it simple." Clear and Simple as the Truth is sort of a step past that to a slightly more artful style. Another book I enjoyed was The Artist's Way, which despite the title has a lot about writing.
I don't know anything about professional therapy, and perhaps these suggestions are all way off the mark for you, but I offer them just in case you find them useful. I'm sorry that writing is so painful for you!
> I used to help coach college friends in their writing. Often their first drafts would have complicated pretentious sentences that really weren't even parseable as sentences, and first I'd ask them, "What do you mean here?" And then when they'd explain, "Write that down!" Perhaps something like that would work for you, to help take you from a "composing" mindset to a "conversing" mindset. You could even record yourself or use some dictation software. It may even make your writing easier to read.
Interesting. I often encounter the problem at other the end of the spectrum: People who are used to verbal communication, which often results in rather scarce writing that resembles snippets of a verbal conversation rather than a cohesive thought and therefore lacks to details to properly understand meaning and intention.
Usually that kind of writing requires a lengthy series of follow up questions to learn anything meaningful about the original idea of the author. Conciseness is onyl valuable if it doesn't sacrifice substance and meaningful content.
I don't have that strong of a reaction, but realized fairly recently that I also get a lot of anxiety from writing on demand.
What works for me is not starting from scratch. If I do, I'll either never get it done or procrastinate until the last minute (while building up an incredible amount of anxiety in the interim).
Instead, I try one of two things:
1) Repurpose something else I have. As long as I have a seed to build off of or skeleton to frame against, I'm able to tackle it fine. If I have no frame of reference, I'll try to find one. In your self-evaluation case, I'd ask for an anonymous example from your boss or HR to understand the expectations.
Or, 2) Ask a trusted friend or colleague to check it over. My work context switches from C-level client management to architecture and analytics-related dev work. While I can articulate a matter to any audience, that also means I can completely miss the mark if I misjudge an audience/recipient I haven't addressed before. So I'll brain dump a bunch of stuff, then ask someone who's closer to the target audience or more familiar with them. They'll help act as a sanity check whether I'm on the right page, and I use their feedback to refine things.
I'm not sure if either of those coping strategies will help for you, but I wanted to mention them just in case!
I think the "starting from a frame of reference" is good, I wouldn't necessarily ask HR for what they expect. That's pushing them to commit to something, which they don't want to do either. Instead, look online.
Self-evaluation is just another piece of bullshit process where people's expectations are formed around the bullshit everyone is handing in. Chances are that what these people are handing in is highly informed by whatever the top Google results are.
Ordinary people don't necessarily have qualms about working this way, people with anxiety issues often have this misguided desire to be "original". Being unoriginal is fine though, it hooks into familiarity and it doesn't cause extra work. Nobody is excited about reading the performance reviews, it's just something to get done.
I think any therapist who specializes in anxiety would be a good fit. Some studies show CBT (cognitive behavioral therapy) to be as effective as medicine.
www.psychologytoday.com has a search for finding local therapists. I'd start there.
And good luck! Feel free to reach out if you have any other questions.
I'm a naturally bad writer but somehow I managed to become confident in writing documentation, cover letters etc. For cover letters asking friends/family for feedback had helped me a lot, also for this specific topic there are a bizillion great books about the topic - amazon is your friend. Or google: how to write performance review
That said, I think depending on the kind of writing you want to do, there is probably a book/article about it.
Also what is a nice strategy that always works for me: start with brainstorming or random bullet points. Put things in order, like a 1 or 2 level hierarchy. Mark important things, throw out things you are not comfortable with. Add some details.
Then get an example text. In the case of cover letters there's always a standard structure: intro, main part, end. And then replace it with your words. Also in the case of reviews, maybe you can ask your colleagues to see how they structure their writing and even review yours before you hand it in.
Are you terrible at writing in general, or specifically for self-evaluation?
Personally I feel very confident at writing, to the point where I fantasize about a professional writing career. But I can completely imagine freezing up at a self evaluation.
Have you considered that you might have ADHD or some other cause for your writing difficulties besides just anxiety? If so, it may help to work with an occupational therapist to come up with specific strategies to work better (e.g., setting up an environment conducive to writing, scheduling time to write, outlining before beginning).
As someone on a PIP who is quite sure the problem is on my side, not the company's, I wish there were mentors that a software engineer could hire to help you figure out how to debug problems with his/her job performance.
One thing I wish that I had been prepared for out of university is that there is just a lot less feedback on how good of a job you're doing. Nobody grades your work and there is a skill to getting specific feedback on your performance.
Asking "how am I doing?" at a weekly or fortnightly 1-on-1 isn't going to get you anything useful. You need to ask someone you're working with directly and frame a question in terms of situation-action-?impact?. So "When you submitted that PR and I pointed out two cases that I thought could use additional tests, was that useful?"
I wish I knew how to find an occupational psychotherapist who specialised in working with programmers/sysadmins/engineers and who practised either in London or over video/email.
As an engineer who has been fired twice for performance problems, I don't have that luxury.
> Break touch tasks down into very, very laughably small tasks.
This works well if you've used the technology/tool before and you feel like you understand what you are doing. It is very difficult if you are in the circumstance of having to learn things as you go and having to prodding at things and trying things to figure out how things work. In cases like these, it is better to just figure out what the smallest first step is and iterate that way.
Unless of course you have the breathing room to spend time working through a tutorial on whatever set of abstractions you are trying to work with.
> It is very difficult if you are in the circumstance of having to learn things as you go and having to prodding at things and trying things to figure out how things work.
With respect, it sounds like you are describing a problem caused by not knowing the technology/tooling well enough to begin completing the task, rather than a problem directly caused by procrastination.
That being said, one can easily procrastinate the task of learning too :-)
In cases like this, the first item on the to-do list could be a time-limited R&D task where the goal is to learn enough so that you can compose a more concrete plan.
> caused by not knowing the technology/tool well enough.
Yes. But given the average quality of documentation and the fact that the most common advice for how to learn a new technology is just to build something with it, how uncommon is this?
What do I do when I'm asked how long a feature will take and the honest answer is "I don't know"? I have tried to teach myself how to create software timeline estimates; I've still not figured it out, and it seems like nobody knows how to do it.
When I tell someone that I don't know and they still press me for an answer, I usually cave and give a random guess, followed by "but I would not rely on that." I feel so dishonest lying to people's faces like that but in the moment it feels like it is the only way to get the situation to end. Should I just get a friend and practice staing steadfast in refusing to answer? Is there something I can say that isn't going to sound like I am incompetent?
Use historical data (yours and/or the company's.) Find an IRC room or something where you can ask other developers how long something could take. Try writing down every small feature, or class required, or other chunk of project and multiply the length of that list by some number like 10 hours.
Learn to qualify your "I don't know"s with details of how you're going to find out. "I don't know, but here's a guess" is far less useful than "I don't know, but I can do an hour or two of research and then get back to you with a decent estimate".
Since you're new you might be able to get the time they have in mind by asking 'what are your expectations for this'. (keep in mind some managers aren't good at estimating development time or might try to low ball the time to see how productive you can be)
Other than that every task/spec is different. I would review the task/spec then get back with them with an estimated range of time. 4 to 6 hours/4 to 6 days and tell them you'll update them on your progress as it's completed.
Once you're working on if things are going faster complete it/test it/review the spec/double check it and then present it as things went better than my estimate.
If things are taking longer, go to them early with what is completed and an outline of items that are taking longer than your estimate and have a new estimate ready for the time to overcome these challenges and complete it.
I would say relax, be a good listener and communicator, re-read specs/requirements and make sure you're complete/thorough in your work keep them informed and you should do fine.
Since you're new try to find someone you can trust, to be your mentor, show you the ropes, help you out, bounce ideas off of, give you the lay of the office/land.
You're pretty new to the industry I'm guessing. Estimation is one of the hardest things a developer can be asked to do, and the only technique that will consistently work is getting experience so that you have similar tasks to compare the one you're estimating to.
In the meantime, try to break things down if you can't even start on an estimate - what are the steps involved in making Task X happen? Keep breaking those tasks down until you get to something you can estimate. That's what the estimation time you ask for is used for.
In my own opinion, just give a personal estimate and it's fine that it's not accurate. If you think they won't be wary of that, tell them that. I don't think this is something easy to estimate even after years and years of hard programming.
I would love to "just relax" and that's what I used to do. But after having been fired for underperformance twice, I want to figure out what it is about the way I work that leads to problems and to change that.
Does the advice "be yourself" mean "do what you would tend by habit to do"? If so, I think that would probably have the same result it's had in 2/3 dev jobs I've held: me getting fired.
I originally thought I had impostor syndrome too, since it was constantly talked about at school. I should have mentioned that I've been fired from 2 dev jobs I've held before this, so apologies for that.
Explicitly asking for feedback is a good idea, though I worry that 2 weeks is too infrequent. Would every 1 week be annoying?
I do probably need to spend more time figuring out the root causes, though perhaps that is better done by talking with a friend rather than just thinking things over by myself. My current understanding is this:
* When I'm confused about what a task really entails or what tools I can use and I try to get people to resolve that ambiguity, I sometimes cannot persuade them to do so.
* Sometimes I don't recognize that I lack the knowledge/documentation to do something and instead approach it with an "I'm smart and resourceful; I'll figure it out" attitude. By the time I convince myself that I need to ask for help, I'm embarrassed about not having made progress.
* I've gotten feedback that I "try to understand the universe" when debugging an unfamiliar system. That I should be more focused in my search. The difficulty here is that, when I'm working with an unfamiliar system, I don't know the lay of the land and so I end up spending a long time trying to get a sketch of a mental model of it because, well...how else could I solve problems?
* As my username suggests, I get distracted easily and sometimes find myself losing 5+ hours to distraction. I've been able to fight this to some degree using SelfControl.app and by making sure I get good sleep.
* I don't know how to come up with task estimates that have any relationship with reality. I've said "I don't know how to give software timeline estimates", but often get pushed to give a number anyway. I really really hate lying to a coworker/supervisor's face and wish I could find a way avoid it. I've tried to learn how to do estimation and bought a book on it, but all of the advice seems to focus on projects on a months-long scale rather than things that should take a couple hours.
Well the things I listed in my OP are my concrete ideas for how to approach these working on these things. If you have other concrete suggestions, I would love to hear them.
As an example: The reason why I focus on studying rails is that all of the debugging techniques I know about involve getting a better idea of the system at some layer of abstraction. I suspect that my best shot at getting better at debugging is to know the framework the code is written in very well and thereby be able to understand the codebase more easily.
For a problem like "I can't get clarity around what we are trying to do here.", it seems like there aren't any books on the topic. Thats why I figured that finding a mentor would be good.
The problems you describe sound like communication issues, not technical issues. Specifically, it sounds like you have a real problem with asking for help when you need it. Your time might be better spent reading a book on effective communication or perhaps taking a course at a local community college.
A. Relying on geometry and visual metaphors, which seems fantastic from a history-of-mathematics and a visual-working-memory point of view.
B. Encouraging kids to see themselves as mathematicians, which seems healthy.
C. Randomly thinking "kidz these days like tiktok. Put something about that in there." which seems superficial and imposes a lot more work.