You can always tell an experienced engineer if he says something like "Doing <X> was not hard, it's described here.", and points to a 300+ page manual.
867 karma · joined January 4, 2018
You can always tell an experienced engineer if he says something like "Doing <X> was not hard, it's described here.", and points to a 300+ page manual.
If done in a naive way this takes on the order of m^2 time if your series is m samples long. By cleverly re-using results, the evaluation can be done in the order of m log(m) time.
The re-use of intermediate results can be done by observing that P(x) = P_even(x^2) + x P_odd(x^2), and using this recursively. The FFT of a sequence can now be computed by dividing the sequence into even and odd coefficients, taking the FFT of those subsequences, and re-combining them into the FFT of the whole sequence. The combination of the FFT's to the FFT of the whole sequence can be done in O(n) time, and total time is then O(n log(n)). The recursion is similar to that done in mergesort. One important difference is that it is essential that the length of the sequence is a power of two.
If P(x) = a + bx + cx^2 + dx^3 + ex^4 + fx^5, then P_odd(x) = b + dx + fx^2 and P_even(x) = a + cx + ex^2
This is the basis of the algorithm. The bit reversals are only needed when you do everything in place. And honestly, I don't understand that either.
I am usually home at about six. I then cook, do dishes and hurry to get to sports training, am back at 22:00, hit the shower and go straight to bed.
I also have a buttload of stuff I want to learn, and so many projects I want to do that I never get to really work on anything.
Most CS questions are a bunch of concepts that you rarely use in practice. Most development work is implementing your ideas in a way that works with other peoples code and the framework thats used.
The best code I wrote was in assembly language. I'd divide the code into blocks with comments. Each comment would document the expected state at that point, what the block would do, and the state after that block.
I wrote pages and pages in my noteblock, and while not everything was bug-free most of it was, and I have never experienced such a nice development process. Nowadays I have to consult five coworkers to ask how to call their undocumented methods and initialize the classes.
I have recently encountered the book 'Toward Zero-defect Programming', where exactly this approach is recommended. Key points are (from the top of my head):
1. You should know the programming language you're using inside-out.
2. Don't *try* your code, but *reason* about it, and comment/document this reasoning.
3. Do group reviews of the code and try to find holes in the reasoning, and problems with the code.If all accounts would have sane restrictions on the password it would become trivial to have something both secure and convenient. I have been looking for a system that allows me to: 1. Does not require me to remember an absurd amount of information. 2. Allows me to login to services, even from other devices. 3. Has a unique password for each service (so that it is not disastrous if one password leaks).
We could have one master password, use site and username (and maybe a counter, to make it easy to rotate passwords) as salt, and use a hashing or password derivation algorithm to derive a unique password for each service. This would only require you to pick and remember a strong master password.
- dealing with technical debt of other systems
- strictly following a policy or a standard
- fighting with the in-house dev environment
> There were very few interesting problems that actually required to find an effective solution / optimize / enforce security."That's how I feel as well at my current job, but it seems to hold for almost all IT jobs I've encountered.
I was faced with the same problem when I wrote my first program in assembler. I solved this by making blocks. At the begin and end of each block, I put the requirements and guarantees on the value in each register in a comment.
I work as a IT consultant and maybe my vision is skewed, but I never encountered that very basic level of specification before. At the companies where I have worked, requirements are usually specified verbally, in a loose way. Additionally, OOP concepts are (ab)used, so you there is a lot more state to keep track of.
I imagine that if you think about the structure of the project and specify interfaces of units very precisely (both in terms of what in- and output is allowed, what data types, etc.), this would work a lot better.
In terms of structured working for myself, my background in math and low-level programming has helped me a lot. In terms of working in a team, it has made me aware of how little concrete information is written down, and how much information is in peoples heads only.
If you checkout a commit, the commit represents the state of the repository. If you revert a commit, the commit represents a set of changes.
Edit: You're right, but my point was that the revert command treats a commit like a set of changes, not like the state of of a repo (since you can't revert the state of a repo, but you can revert changes).
Where I currently work we're using Azure to do a shitload of computations. At the same time, many modules don't even bother to throw away intermediate calculations. They literally have a giant array of them, and save every result, for each step, even if it's not necessary.
But hey, the project is seen as a huge success, because it's so complex.
There are a couple more flaws. The commandline is not very consistent, and the complete model is way too complicated IMHO. I can work with it now, but it took me a long time to grasp all of the concepts that I need - without feeling the need for distibuted version control. About that: It's kind of ironic that git is hailed for being distributed, but everyone just uses github, a centralized system.
Saudi-Arabia is filthy rich, and apparently, that makes murdering an American citizen on Turkish ground legal. I feel disgusted, and everyone who does any business whatsoever with the Saudi-Arabian government is a hypocrite.
I know, that's why I mentioned teaming up with one or more people!
> I guess I just need to be more aggressive in concentrate on more smaller companies.
I think that would be a good idea. I think building a complete product will be more valued in smaller companies (especially startups, where you can actually work with a 'greenfield' project).
I saw you commenting on one of my posts yesterday, and I checked out your projects. They look very good, and I can't really put my finger on the problem. Maybe you should put more emphasis on your projects on your resume? If I remember correctly you're in Canada and looking for a job in the US. It might just be the added overhead of finding a job in another country.
It's also a possibility to market your products more. If you have friends who would be good at this, they can help you. You have quite a fancy product, and I bet many people would love to start a journey to build something with you. Find someone with more experience in looking for investors and you might have something on your hands (and you wouldn't even need to do an interview).
I think the tech job market is a hard one because there are so many niches. That said, have you tried an interview training? It is hard for people to point out the problem via the internet. No offense, but maybe there is a simple thing you're doing wrong. I know I have a tendency to undersell myself, and I don't always share my excitement with others, which might come across as a lack of enthusiasm.
Last but not least: It can't hurt to study some academic subjects.
Anyway, I wish you the best of luck. Your projects look cool, and I don't understand why you're having a hard time finding a job.
1. Install Linux Mint with xfce. It is very easy to use, is fast, even on older hardware, and has most things that windows has.
2. Replace your harddisk with an SSD. It makes a world of difference. If an SSD is too small/expensive, you can buy a smaller one and use a supplementary external harddisk for your media (which usually takes the most space).
3. Back up your files and do a fresh install of your OS. This time, only install things you need, and prefer standalone programs over installed programs.
4. Buy a new laptop. You can also buy a refurbished hi-end model, which is a bit of a gamble but usually works out well in my experience.The case is even worse when your OS is supposed to run on different hardware. I think this is the main reason that Apple, in general, has a much better UX: They only have to support a limited set of hardware.
Casey Murati has a great rant about this: https://www.youtube.com/watch?v=kZRE7HIO3vk
I'd consider it, for the right job. I haven't looked for jobs in the US, and I would prefer a job in the Netherlands, but it's a possibility.
> I also saw you writing that European companies are very driven by specific technologies. I do not think this is true. Sometimes companies will write "5 years of React" but what they are actually looking for is an experienced frontend developer.
Possibly. From my perspective, it is hard to tell the difference, since I don't have a lot of professional experience.