Nevertheless I heard (I should investigate this rumour) that being lazy enabled an easier integration of the IO system so there seems to be a connection between pure (i.e. side-effect free) and laziness.
- the language
- the text editor
- your build system
- your version control system
If you work with an IDE you have to know - the language
- a text editor (e.g. remote sessions without X)
- the build system
- the version control software
- the ide
- probably a plugin that makes your ide editor behave like your text editor
- a plugin for your language
- a plugin for you build system
- in general: how does the IDE's plugin system work
So I like the idea of IDEs, but for me the abstraction always fails and I struggle with its plugins. I give them a try sometimes but most of them are locked into eco-systems: - qtcreator: QT, C++
- eclipse: Java
- netbeans: Java
- PyCharm: Python
- Clion: C/C++
If you work with different languages, libaries and workflows it is often not trivial to make the IDE adapt (in particular, most of them have their own definition of "projects" and scatter you directory trees with hidden files) and the whole dev-setup gets more complicated. What do you do if you have to use a language that's not supported by the IDE? struct dmatrix {
size_t rows, cols;
double *data;
}
and then a simple double dmatrix_get(struct dmatrix *m, size_t r, size_t c) {
return m->data[r * m->cols + c];
}
is all you need? In particular I find explicit array sizes in function headers very contrived and I have never used them in serious code. Normally it's just a pointer and a length argument similar to e.g. read/write functions in the standard library.