After visiting one of the Wolfram presentations, I started writing code for my number theory research project in Mathematica because I found it to be faster than Sage. I downloaded Workbench and Mathematica, watched the video tutorials on the Wolfram website and read the tutorials in the manual. Then I started coding. After being at it for a week, I find the whole experience to be extremely clumsy as I can not figure out any reasonable workflow. What I do now is this:
I open Workbench which in turn starts Mathematica notebook. I write a procedure spread over multiple cells in the notebook. When I am happy with the result, I copy the code into the workbench .m file where I make it into a function. Afterwards, I start using the function in the notebook to do my calculations or to use it in other procedures.
I am very happy with the control I have over each step in the notebook and coding in workbench feels quite smooth. What really bugs me is the transition between the two. I just can not figure out how to achieve the smooth workflow I am used from IDEs like IntelijIdea in Workbench.
Truth is, when I was downloading Workbench, I was expecting it to replace the notebook environment of Mathematica with more serious IDE. Yet it just launches Mathematica and the notebook each time I run the project anyway.
So my question is this: What is the proper way to use Workbench to write code? Or is it just my inexperience that makes me think I am doing something wrong? The closest question I found was this: Working in a team in Workbench which talks mainly about version control (which I wanna look at in the next step as git does not seem to cut it). Links to articles or tutorials describing proper workflow in Workbench would be much appreciated as well.
Answer
I'll try to answer this as objectively as possible, but note that this answer is shaped by my experiences, so there is a certain subjective flavour to it.
Before you try to figure out a workflow for a non-interactive IDE for Mathematica such as the WorkBench/vim/IntelliJ/Eclipse (henceforth, IDE) and the Mathematica notebook (NB), you should evaluate and determine if your project/package really needs the IDE.
As a simple example:
- Are you designing something small and quick?
- Are you primarily finding your way through the project/topic by trial and error/exploration?
- Is your work heavy on graphics/interactive features?
- Does it require a styled notebook for it to work?
- Are you a beginner in Mathematica?
If you answered yes to any of the above, then you're better off working with an NB than an IDE. A typical IDE is not really suited for these (no interactivity, no graphics, cannot display notebook styles, requires you to create a new project file and folder, etc.) and is geared towards a different audience.
As you've already experienced, these IDEs do not (yet) offer you the convenience of the kernel and interactive evaluations. That means that you, the programmer, should be familiar enough with Mathematica to know the syntax well, be reasonably well versed in the documentation (at least for the basic functions), have a decent grip on operator precedences, be familiar with the scoping rules, levels, etc. Fluency in the language will enable you to continue developing your package without having to stop every second line to cross-check the output of your code (especially the trivial parts) by evaluating it in the kernel. Of course, you should extensively unit test everything you write, but it's good to be able to write freely initially.
Once you start writing medium-large size packages, you'll realize that a good deal of time is spent on the organization and design of the package, in addition to the implementation details. Having a good code structure and organization is important to minimizing the amount of code-reuse and simplifying future maintenance and extensions. An IDE will help you in getting most of this mundane stuff out of the way. The debugging, profiling, refactoring and deploying tools provided by the IDE will greatly help you in streamlining your code and your workflow, and you'll use the NB mostly to test/develop the implementation details, which can then be incorporated back into the package when complete. Again, the IDE can help you here in writing unit tests for the different functions in your package.
Most IDEs also provide good version control features and support most of the common VCS tools. Package .m
files are generally easier to version and share (in teams) than a notebook since they're free of metadata and other front-end box stuff, unlike notebooks.
If your project has no use for any of these features or if you aren't able to utilize them, then it would be overkill to use an IDE.
So my point really is that your IDE + NB workflow is not all that atypical for a Mathematica programmer. However, your project should have the right requirements and you should be sufficiently fluent in the language in order to be able to use them harmoniously,
Comments
Post a Comment